if else声明超过两个条件

时间:2014-10-08 18:45:49

标签: r if-statement

我知道有很多关于ifelse的问题,但我搜索并尝试了很多但没有成功,因此我在这里发帖提问。

我有一个10k参与者的数据框,有8个变量,每个变量编码为0,1,9和NA。我想创建一个变量来汇总所有8个变量。

我要创建的条件是:如果8个变量中的一个值为1,那么新变量应为1,如果一个有9,则返回9,否则(所有行中的NA或其他)返回0

我创建的代码是这个,但只获得1和NA:

z = with(dt, ifelse(var.1==1|var.2==1|var.3==1|var.4==1|
var.5==1|var.6==1|var.7==1|var.8==1, 1, ifelse(var.1==9|var.2==9|var.3==9|var.4==9|
var.5==9|var.6==9|var.7==9|var.8==9, 9, 0)))

谢谢。

1 个答案:

答案 0 :(得分:2)

试试这个(没有数据示例时未经测试的代码):

 ifelse( rowSums(dt[ , c("var.1","var.2", "var.3", "var.4", "var.5", "var.6", "var.7", 
                         "var.8")]==1, na.rm=TRUE), 1, 
       ifelse(  rowSums(dt[ , c("var.1","var.2", "var.3", "var.4", "var.5", 
                                 "var.6", "var.7", "var.8")]==9, na.rm=TRUE) , 
                 9, 0))

ifelse调用将值0隐式强制转换为false,而0以外的任何值都为TRUE。 na.rm=TRUE将总和保持为NA。如果连续的所有值都是NA,我想你可能会遇到问题。