替换数值而不是布尔值

时间:2017-04-14 13:22:28

标签: r

我有一个名为windy的功能,它有布尔值

   data<- data.frame(windy=c(FALSE,  TRUE, FALSE, FALSE, FALSE,  TRUE))

我需要将所有Falses替换为0,将所有Trues替换为100

当我使用

w<-setNames(c(100, 0), c(TRUE, FALSE))[data$Windy]

结果是

FALSE  <NA>  <NA>  <NA>  <NA>  <NA> 
    0    NA    NA    NA    NA    NA 

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

data$windy2 <- data$windy * 100
data
#   windy windy2
# 1  TRUE    100
# 2  TRUE    100
# 3 FALSE      0
# 4 FALSE      0
# 5  TRUE    100

答案 1 :(得分:2)

因为您已经使用布尔值,我建议使用ifelse函数。

data = data.frame(windy=c(FALSE,  TRUE, FALSE, FALSE, FALSE,  TRUE))
data$windy = ifelse(data$windy, 100, 0)
data

答案 2 :(得分:1)

我们可以做到

data$windy <- with(data, (windy + 99)*(windy))
data$windy
#[1]   0 100   0   0   0 100

用数字索引替换值的更通用的方法是

 c(0, 100)[(data$windy)+1]
 #[1]   0 100   0   0   0 100