R 两个以上条件的ifelse语句

R 两个以上条件的ifelse语句,r,if-statement,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

我知道有人问了很多关于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)))
谢谢。

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


ifelse调用将值0隐式强制为false,并且0以外的任何值都为TRUE。
na.rm=TRUE
使总和不为na。我想如果一行中的所有值都是NA,您可能会遇到问题。

您的代码似乎很好。这意味着什么“我创建的代码是这样的,但只得到1和NA”。你能分享一下你的预期产出吗?另外,一个即使只有几行的可复制示例也会很有帮助。输出只有1和NA,但是当我只使用前3或4个变量时,它工作正常。逻辑条件
x==1
返回
TRUE
if x=1,
FALSE
if x=1,但如果x=NA,则返回NA或1(不是0或9)。@jlhoward你是什么意思?你可能想在%中查看
%!有趣的是,你如何使用rowSum,但仍然得到1或9而不是总和。。。希望你明白我的意思。
ifelse
强制整数和为真或假。
 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))