r中的多级条件语句

时间:2017-05-18 12:05:23

标签: r if-statement conditional

我对R很陌生,所以请原谅我,如果这个问题已经在以前的主题中得到解决(也许用我还不太了解的语言)。

我试图根据2个条件生成一个新的向量(df1 $ response_accuracy)。第一个是来自向量df1$Facial.expression的值介于1和4之间,而来自向量df1$Evaluations的值等于"喜欢"。符合此标准的案例输出"正确"进入新的向量和"不正确"除此以外。第二个参数包含一组类似的条件,但每个向量中包含一组不同的值(见下文)。这是我的代码:

df1$response_accuracy <- 
ifelse(df1$Facial.expression == 1:4 & df1$Evaluation == "Like", "Correct", "Incorrect",                      
ifelse(df1$Facial.expression == 5:8 & df1$Evaluation == "Dislike", "Correct", "Incorrect")
)

运行脚本后会生成以下错误消息:

  

ifelse出错(df1 $ Facial.expression == 1:4&amp; df1 $ Evaluation ==   &#34;喜欢&#34;,:未使用的参数(ifelse(df1 $ Facial.expression == 5:8&amp;   df1 $评价==&#34;不喜欢&#34;,&#34;纠正&#34;,&#34;不正确&#34;)

我知道问题可能与ifelse语句支持的接受嵌套格式有关,但找不到适合我命令结构的格式。

提前感谢您提供帮助。

3 个答案:

答案 0 :(得分:0)

这是怎么回事? 我可以看到2个错误,首先如果你想要在2个值之间,你必须这样做x&gt; = 1&amp; X&LT; = 4。 那么你想做什么应该返回2个向量而不仅仅是1 ...然后你必须比较这2个向量。所以逻辑上你有3个ifelse。 这是一个有效的例子..

#just building sample data
x<-1:10
y<-sample(c("Like","Dislike"),10,replace=TRUE)


ans1<-ifelse(x>=1 & x<=4 & y=="Like",T, F)
ans2<- ifelse(x>=5 & x<=8 & y== "Dislike", T,F)

output<-ifelse(ans1 & ans2,"Correct", "Incorrect" )

答案 1 :(得分:0)

你不能嵌套ifelse - s。语法为ifelse(test, yes, no)。所以你需要解开它们

答案 2 :(得分:0)

感谢您的回答和评论。我设法通过离开ifelse并创建一个名为'correct_cases'的值来找到解决方案。然后,在生成通用向量df$response_accuracy之后,我通过indice强制执行此命令;见下文

correct_cases <- (df1$Facial.expression %in% 1:4 & 
df1$Evaluation == "Like") |
(df1$facial.expression %in% 5:8 & 
df1$Evaluation == "Dislike")

df1$Response_accuracy <- "Incorrect"

df1$Response_accuracy[correct_cases] <- "Correct"