【发布时间】:2020-03-18 10:26:17
【问题描述】:
我正在尝试对具有 NA 的列应用 ifelse 语句,并希望在存在 NA 时给出 else 条件。相反,我只是得到 NA。我的实际案例使用了多个列,这让我很难找到解决方案(例如,我无法将 NA 转换为 0,因为所有列都缺少某些案例)。
数据:
df <- data.frame(a=c(NA, 1:3, NA) , b=c(NA,4:6,NA), c=c(5,10,15,20,25))
a b c
1 NA NA 5
2 1 4 10
3 2 5 15
4 3 6 20
5 NA NA 25
尝试:
df2 <- df %>% mutate(check=ifelse((a<=2&b>4)|c==25,1,0))
结果:
a b c check
1 NA NA 5 NA
2 1 4 10 0
3 2 5 15 1
4 3 6 20 0
5 NA NA 25 1
期望的输出:
a b c check
1 NA NA 5 **0**
2 1 4 10 0
3 2 5 15 1
4 3 6 20 0
5 NA NA 25 1
【问题讨论】:
-
df2$check[is.na(df2$check)] <- 0 -
df2 <- df %>% mutate(check=ifelse((a<=2&b>4) & !is.na(a) & !is.na(b)|c==25,1,0)) -
你已经很亲近了,只需要像上面一样添加
!is.na(...)