使用|和&;同时在R中(两个值都可以为真,但都不能为假)
数据集中有两个变量:x和y 我想以一种既可以为真,又不能为假的方式对数据帧进行子集划分 我试过:使用|和&;同时在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 == 1 | y == 1 & x != 0 & y !=0
我能理解这样的逻辑表达时有一个问题,但我不知道确切的原因
我应该怎么做呢?因为R从左到右解释了同等优先级的中缀表达式,我认为,一旦对前两个进行了计算,你就会发现其余的都是多余的。逻辑OR(|)将允许两者都为真。它不是XOR(所谓的“异或”)。您应该意识到,如果x和y都是NA,您将得到一个NA。因此,您可能需要先测试这一点,然后决定在这种情况下要发生什么。因为R从左到右解释优先级相等的中缀表达式,我认为,一旦计算了前两个表达式,您将发现其余表达式完全相同多余。逻辑OR(|)将允许两者都为真。它不是XOR(所谓的“异或”)。您应该意识到,如果x和y都是NA,您将得到NA。因此,您可能需要先测试这一点,然后决定在这种情况下要发生什么。
-两者都必须为真x&y
-至少有1个为真(或两个均为真)x | y
-只有一个是真的(不是两个都是真的)xor(x,y)
-两者都不正确。(与!x&!y
相同)!(x | y)
真
,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
-至少有1个为真(或两个均为真)x | y
-只有一个是真的(不是两个都是真的)xor(x,y)
-两者都不正确。(与!x&!y
相同)!(x | y)
真
,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可能很好?进行了出色的点编辑。