2015-11-04 68 views
2

在存在NAs时使用ifelse函数时,我遇到了一个问题。R Ifelse陈述由于NAs而不能正常工作

数据:

x=data.frame(rbind(c(1,1,0),c(0,NA,1))) 
colnames(x)=c("a","b","c") 

目标:创建一列的 “测试”,即改变为0,如果A或B是1,如果既不是或b是1,测试= C

问题:当b = NA,这是不等于1时,测试= NA,#当它应为1。

作品正确在行1但不能用于行2

x=mutate(x, 
     test=ifelse((a==1|b==1),0,c)) 

> x 
    a b c test 
1 1 1 0 0 
2 0 NA 1 NA 

有关如何修复它的任何建议?

+0

'NA'是没有价值的。因此,您可以通过说出如果a或b为NA时会发生什么情况来更新您的条件,或者在执行'ifelse'之前创建一个用固定值替换NAs的流程。 – AntoniosK

回答

2

由于条件只关心1ab存在,我建议创建一个过程,与不1一个值替换NA秒。

喜欢的东西

library(plyr) 

x=data.frame(rbind(c(1,1,0),c(0,NA,1))) 
colnames(x)=c("a","b","c") 

# create an updated version of x where NAs are replaced with 0s 
x2 = sapply(x, function(i){ifelse(is.na(i),0,i)}) 

x2 = data.frame(x2) 

x2 = mutate(x2, test=ifelse((a==1|b==1),0,c)) 

# update initial dataset 
x$test = x2$test 

x 

# a b c test 
# 1 1 1 0 0 
# 2 0 NA 1 1 

如果你希望创建一个ifelse条件试试这个

mutate(x, test = ifelse((a!=1 | is.na(a)) & (b!=1 | is.na(b)), c, 0)) 
+1

感谢您发现错误,您的上次修改修正了它! – christoph