如何在 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
这是我的可重现示例:
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