子集化时没有给出正确值的逻辑条件

时间:2016-04-16 13:38:26

标签: r logic subset

我想使用逻辑分组我正在使用的数据框project。我得到了一个矛盾的结果。 ROLL.NO.参数之前的逻辑部分与问题无关。对不起,我无法给出一个可重现的例子。请告诉我如何才能使此问题重现,而不必在我的数据框中显示相关列的全部393个条目。D14DC31是简单的整数值,其中一些值为{{ 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.==3136FALSE时,我无法看到为什么在使用ROLL.NO.添加其他参数时调用其他ROLL.NO.。此外,相同的三个条目与任何被调用的&一起错误地重复。ROLL.NO.列中没有NA个值。并且每个条件中的逻辑向量的长度是相同的,因此没有回收。如果需要提供更多信息,请告诉我。

附录

ROLL.NO.

1 个答案:

答案 0 :(得分:2)

来自?base::Logichelp('&')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的优先级高于逻辑