R Ifelse声明由于NA而无效

时间:2015-11-04 23:10:17

标签: r if-statement na

在存在NA的情况下使用ifelse函数时,我遇到了一个问题。

数据:

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

目标:创建一个列" test",如果a或b为1,则变为0,如果a或b都不是1,则test = c

问题:当b = NA,不等于1时,test = 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

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

1 个答案:

答案 0 :(得分:2)

由于条件仅关注1ab的存在,我建议创建一个用NA取代1的流程值不是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)) 条件,请尝试此

SELECT CAST(DATENAME(MONTH,GETDATE()) AS VARCHAR(3)) + ' ' + CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR(4)) AS mystring