我知道有很多关于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)))
谢谢。
答案 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,我想你可能会遇到问题。