我想使用逻辑分组我正在使用的数据框project
。我得到了一个矛盾的结果。 ROLL.NO.
参数之前的逻辑部分与问题无关。对不起,我无法给出一个可重现的例子。请告诉我如何才能使此问题重现,而不必在我的数据框中显示相关列的全部393个条目。D14
和DC31
是简单的整数值,其中一些值为{{ 1}}。
NA
我试图了解代码中出了什么问题,并且还包含了这些查询的结果。对于任何其他 culprits<-project$ROLL.NO.[(project$DC31==1&project$D14==2)|(project$DC31==2&project$D14==1)&!is.na(project$DC31)&!is.na(project$D14)]
culprits
[1] 3138 3129 3129 3135 3135 3136 3120 3126 3133 3125 3125 3125 3132 3132 3123 3123 3131
project$HOUSE.NO[(project$DC31==1&project$D14==2)|(project$DC31==2&project$D14==1)&!is.na(project$DC31)&!is.na(project$D14)&project$ROLL.NO.==3131]
[1] "14/132" "14/176" "16/133" "14/111" "14/252"
> project$HOUSE.NO[(project$DC31==1&project$D14==2)|(project$DC31==2&project$D14==1)&!is.na(project$DC31)&!is.na(project$D14)&project$ROLL.NO.==3129]
[1] "14/132" "15/162" "14/176" "16/133" "14/111"
> project$ROLL.NO.[(project$DC31==1&project$D14==2)|(project$DC31==2&project$D14==1)&!is.na(project$DC31)&!is.na(project$D14)&project$ROLL.NO.==3136]
[1] 3129 3136 3120 3123 3123
project$ROLL.NO.[(project$DC31==1&project$D14==2)|(project$DC31==2&project$D14==1)&!is.na(project$DC31)&!is.na(project$D14)&project$ROLL.NO.==3125]
[1] 3129 3120 3125 3125 3125 3123 3123
project$ROLL.NO.[project$ROLL.NO.==3136]
[1] 3136 3136 3136 3136 3136 3136 3136 3136 3136
,当project$ROLL.NO.==3136
为FALSE
时,我无法看到为什么在使用ROLL.NO.
添加其他参数时调用其他ROLL.NO.
。此外,相同的三个条目与任何被调用的&
一起错误地重复。ROLL.NO.
列中没有NA
个值。并且每个条件中的逻辑向量的长度是相同的,因此没有回收。如果需要提供更多信息,请告诉我。
附录
ROLL.NO.
答案 0 :(得分:2)
来自?base::Logic
,help('&')
,help('|')
等
有关这些运算符的优先级,请参阅
Syntax
:与许多其他语言(包括S)不同,AND和OR运算符的优先级不同(AND运算符的优先级高于OR运算符)。
解释了为什么
TRUE | TRUE & FALSE
# [1] TRUE
基本上是
TRUE | (TRUE & FALSE)
这也是事实,并简化了你在这里所做的事情:
(project$DC31==1&project$D14==2) |
(project$DC31==2&project$D14==1) &
!is.na(project$DC31) &
!is.na(project$D14) &
project$ROLL.NO. == 3131
因为你希望结果只包含一些project$ROLL.NO. == 3131
我假设,所以即使其中一些是假的,如果一个或多个OR
为真,你可能得到一些不是{{ 1}}不是ROLL.NO.
另请注意,3131
的优先级高于逻辑