在存在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
有关如何修复它的任何建议吗?
答案 0 :(得分:2)
由于条件仅关注1
和a
中b
的存在,我建议创建一个用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