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

使用|和&;同时在R中(两个值都可以为真,但都不能为假),r,logic,logical-operators,R,Logic,Logical Operators,数据集中有两个变量:x和y 我想以一种既可以为真,又不能为假的方式对数据帧进行子集划分 我试过: x == 1 | y == 1 & x != 0 & y !=0 我能理解这样的逻辑表达时有一个问题,但我不知道确切的原因 我应该怎么做呢?因为R从左到右解释了同等优先级的中缀表达式,我认为,一旦对前两个进行了计算,你就会发现其余的都是多余的。逻辑OR(|)将允许两者都为真。它不是XOR(所谓的“异或”)。您应该意识到,如果x和y都是NA,您将得到一个NA。因此,您可能需要先测试这

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

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

我试过:

x == 1 | y == 1 & x != 0 & y !=0
我能理解这样的逻辑表达时有一个问题,但我不知道确切的原因


我应该怎么做呢?

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

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


  • x&y
    -两者都必须为真
  • x | y
    -至少有1个为真(或两个均为真)
  • xor(x,y)
    -只有一个是真的(不是两个都是真的)
  • !x&!y
    -两者都不正确。(与
    !(x | y)
    相同)
这应该很好地涵盖了它

如果数据是二进制的(1s和0s),1将被视为
,0将被视为
,因此您不需要麻烦处理一堆
=

如果您将多个逻辑运算符组合在一起,我强烈建议使用括号来确保操作/分组的顺序与您所认为的一致

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

  • x&y
    -两者都必须为真
  • x | y
    -至少有1个为真(或两个均为真)
  • xor(x,y)
    -只有一个是真的(不是两个都是真的)
  • !x&!y
    -两者都不正确。(与
    !(x | y)
    相同)
这应该很好地涵盖了它

如果数据是二进制的(1s和0s),1将被视为
,0将被视为
,因此您不需要麻烦处理一堆
=

如果您将多个逻辑运算符组合在一起,我强烈建议使用括号来确保操作/分组的顺序与您所认为的一致

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

您是否需要
x&y
。请显示一个小示例和预期输出
x&y
-两者都必须为真;
x | y
-至少1为真(或两者都为真);
xor(x,y)
-正好有一个为真(不是两者都为真)!x&!y-两者都不是真的。这应该很好地涵盖了这一点。您是否需要
x&y
。请显示一个小的示例和预期的输出
x&y
-两者都必须是真的;
x | y
-至少1是真的(或两者都是);
xor(x,y)
-正好有一个是真的(不是两者都是)!x&!y-两者都不是真的。这应该很好地涵盖了这一点。在测试套件中包含NAs可能很好?进行了出色的点编辑。在测试套件中包含NAs可能很好?进行了出色的点编辑。