我正在尝试根据数据集中的其他变量创建一个新变量。我曾经使用过ifelse来完成类似的任务,但是,当我这次尝试时,如果不满足条件,我就会得到NA。
我要基于新变量的变量都是二进制的-“是”或“否”。如果其他变量中的任何一个为“是”,我希望将新变量编码为“是”,如果它们都不被编码为“是”,则我希望将新变量编码为“是”。运行ifelse时,得到的期望值为“是”,但是我希望为“否”是NA。
我尝试了以下方法:
data$new <- ifelse(var1=="Yes" | var2=="Yes" | var3=="Yes","Yes","No")
任何帮助将不胜感激。我已经更改了数据名称,并在示例中放入了三个变量。实际上总共有22个变量,它们的名称非常相似,我试图简化示例。如果看到实际的数据/代码会有所帮助,我将其添加进来。
谢谢!
答案 0 :(得分:5)
如果有任何NA,则==
返回NA
。一种选择是将cbind
变量'var1','var2','var3'(不清楚是data.frame列还是独立向量),与"Yes"
比较,以创建一个逻辑矩阵,请使用rowSums
获得“是”字符串的总和。请注意na.rm = TRUE
,它将处理NA
元素(如果有)。使用行总和,检查值是否大于0,然后是“是”,否则是“否”
ifelse(rowSums(cbind(var1, var2, var3)== "Yes"), na.rm = TRUE) > 0, "Yes", "No")
检查其为什么产生NA
v1 <- c("Yes", "No", NA)
v2 <- c("No", NA, "Yes")
(v1 == "Yes")|(v2 == "Yes")
#[1] TRUE NA TRUE
答案 1 :(得分:0)
在创建变量时尝试用complete.cases()忽略不适用
df$new <- ifelse((var1 =="Yes"| var2=="Yes"|var3=="Yes")& complete.cases(df), "Yes", "No")