使用 |和 & 同时在 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
我在数据集中有两个变量: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