我不明白这个错误:
Warning message:
In if ((t$carried2 == t$Dead5) & (t$carried2 == t$Dead6)) { :
the condition has length > 1 and only the first element will be used
我的代码:
if ((t$carried2 == t$Dead5) & (t$carried2 == t$Dead6)) {(t$Dead5 = 0) & (t$Dead6 = 0)}
这可能很糟糕,但我是新人。无论如何,我想说(如果发生这种情况){那么这个和那个= 0
答案 0 :(得分:2)
这个怎么样:
indices <- (t$carried2 == t$Dead5) & (t$carried2 == t$Dead6)
t$Dead5[indices] <- 0
t$Dead6[indices] <- 0
这会将条件为t$Dead5
的行设置为t$Dead6
和TRUE
的值为零。
您在评论中说要清理数据框。以下是删除indices
为TRUE
的行的方法。如上indices
:
t <- t[!indices,]
答案 1 :(得分:2)
R中的if
子句需要一个布尔值:TRUE或FALSE。
使用&
你会返回一个布尔值的向量,这就是警告的原因:
...只会使用第一个元素
因此它将选择第一个布尔值并使用它来测试if-else。
您可能希望查看ifelse
,其工作方式类似于'向量化'if-else
运算符。
另请查看&
和&&
之间的差异:
&安培;和&amp;&amp;表示逻辑AND和|和||表示逻辑OR。较短的形式以与算术运算符大致相同的方式执行元素比较。较长的形式从左到右评估仅检查每个向量的第一个元素。评估仅在确定结果之前进行。较长的形式适用于编程控制流程,通常在if子句中是首选。