R中基于其他列创建新列的代码错误原因咨询
问题原因分析
你的代码问题出在最后一行的逻辑条件写法错误:
training_data.df$Correct[(training_data.df$Condition==1|3) & training_data.df$Response==2] <- 1
错误细节
在R中,逻辑或运算符|的两侧必须是完整的逻辑判断表达式。而你写的Condition==1|3会被R解析为(Condition==1) | 3——这里的3是一个非零数值,在逻辑判断中会被自动转换为TRUE。因此整个表达式等价于(Condition==1) | TRUE,结果永远为TRUE,和Condition的实际值无关。
这就导致最后一行的条件简化为TRUE & (Response==2),也就是只要Response==2,无论Condition是什么,都会把Correct设为1。所以当Condition==2且Response==2时,这行代码会覆盖前两行的结果,把原本应该是0的Correct改成1。
正确写法
要表示Condition是1或3,你需要用以下两种方式之一:
- 拆分逻辑判断:
(training_data.df$Condition==1) | (training_data.df$Condition==3) - 使用
%in%运算符:training_data.df$Condition %in% c(1,3)
修正后的最后一行代码:
training_data.df$Correct[(training_data.df$Condition %in% c(1,3)) & training_data.df$Response==2] <- 1
内容的提问来源于stack exchange,提问作者SilvaC
相关产品推荐
相关产品推荐

