如何在 R 中组合不同的条件?

How to combine different conditionals in R?

这是我的可重现示例:

SMTscenes.ACC SMTscenes.RESP TrialType 
0             4              Old
0             3              Old
0             r              New
0             2              New
0             1              New
0             r              Old
0             3              Old
0             4              New

我开始使用以下命令摆脱 "r" 以便下一个条件符合数字,然后应用条件:

levels(df$SMTscenes.RESP)[levels(df$SMTscenes.RESP)=="r"] <- "5"
df$SMTscenes.ACC <- ifelse(df$SMTscenes.RESP >= '3' & df$TrialType == 'Old', '1', '0')
df[is.na(df)] <- 1
levels(df$SMTscenes.RESP)[levels(df$SMTscenes.RESP)=="5"] <- "r"

这会产生

SMTscenes.ACC SMTscenes.RESP TrialType 
1             4              Old
1             3              Old
0             r              New
0             2              New
0             1              New
1             r              Old
1             3              Old
0             4              New

棘手的部分来了:如果我尝试使用以下内容(现在 'New'):

levels(df$SMTscenes.RESP)[levels(df$SMTscenes.RESP)=="r"] <- "5"
df$SMTscenes.ACC <- ifelse(df$SMTscenes.RESP <= '2' & df$TrialType == 'New', '1', '0')
df[is.na(df)] <- 1
levels(df$SMTscenes.RESP)[levels(df$SMTscenes.RESP)=="5"] <- "r"

那么很明显,它会反转上一步。现在,我尝试以各种方式调整它,比如混合条件,但都无济于事。我想要的最终结果是这样的:

 SMTscenes.ACC SMTscenes.RESP TrialType 
1             4              Old
1             3              Old
0             r              New
1             2              New
1             1              New
1             r              Old
1             3              Old
0             4              New

那么,关于如何实现这一点的任何指示?我会手动完成,但有数千行数据...感谢所有帮助。

分别创建每个索引,然后使用 OR 运算符组合 (indx1 | indx2)。而不是将 'r' 值更改为 '5' 然后来回更改,而是将其添加为附加条件:

indx1 <- as.numeric(df$SMTscenes.RESP) <= 2 & df$TrialType == "New" 
indx2 <- (as.numeric(df$SMTscenes.RESP) >= 3 | df$SMTscenes.RESP == 'r') & df$TrialType == "Old"
df$SMTscenes.ACC <- as.integer(indx1 | indx2)
df
#   SMTscenes.ACC SMTscenes.RESP TrialType
# 1             1              4       Old
# 2             1              3       Old
# 3             0              r       New
# 4             1              2       New
# 5             1              1       New
# 6             1              r       Old
# 7             1              3       Old
# 8             0              4       New