使用 |和 & 同时在 R 中(任何一个值都可以为真,但都不能为假)

Using | and & simultaneously in R (either values can be true, but neither can be false)

我在数据集中有两个变量:x 和 y

我想以一种既可以为真又可以为假的方式对数据帧进行子集化

我试过:

x == 1 | y == 1 & x != 0 & y !=0

我可以理解这样表达逻辑时有问题,但我不明白为什么,确切地说

我应该怎么做?

因为 R 从左到右解释同等优先级的中缀表达式,我认为一旦计算了前两个,您就会发现其余的完全是多余的。逻辑或 (|) 将允许两者都为真。它不是 XOR(所谓的“异或”)。你应该意识到,如果 x 和 y 都是 NA,你将得到一个 NA。因此,您可能想先对此进行测试,然后决定在这种情况下您希望发生什么。

  • x & y - 两者都必须为真;
  • x | y - 至少有 1 个为真(或两者都有);
  • xor(x, y) - 只有一个为真(不是两个都为真);
  • !x & !y - 两者都不是真的。 (与 !(x | y) 相同。)

这应该涵盖得很好。

如果你的数据是二进制的(1s 和 0s),1 将被视为 TRUE,0 将被视为 FALSE,因此你无需费心一堆==.

如果您组合多个逻辑运算符,我强烈建议您使用括号来确保 operations/grouping 的顺序符合您的想法。

m = expand.grid(x = c(0:1,NA), y = c(0:1,NA) )

## Truth Table
#    x   y  x & y  x | y  xor(x, y)  !x & !y
# 1  0   0  FALSE  FALSE      FALSE     TRUE
# 2  1   0  FALSE   TRUE       TRUE    FALSE
# 3 NA   0  FALSE     NA         NA       NA
# 4  0   1  FALSE   TRUE       TRUE    FALSE
# 5  1   1   TRUE   TRUE      FALSE    FALSE
# 6 NA   1     NA   TRUE         NA    FALSE
# 7  0  NA  FALSE     NA         NA       NA
# 8  1  NA     NA   TRUE         NA    FALSE
# 9 NA  NA     NA     NA         NA       NA