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



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

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

我试过:

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

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

我应该怎么做?

  • x & y-两者都必须为true
  • x | y-至少1为真(或两者都为真(
  • xor(x, y)——恰好一个是真的(而不是两者都是(
  • !x & !y-两者都不是真的。(与!(x | y)相同。(

这应该涵盖得很好。

如果数据是二进制的(1和0(,1将被视为TRUE,0将被视为FALSE,所以您不需要为一堆==而烦恼。

如果你组合了多个逻辑运算符,我强烈建议使用括号来确保操作/分组的顺序是你认为的

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

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

相关内容

最新更新