R逻辑运算符有多个" not"条件

时间:2017-05-12 19:59:35

标签: r

假设我有一个如下所示的数据框:

df<-data.frame(v1=c("a","a","b"),v2=c("c","d","d")
> df
  v1 v2
1  a  c
2  a  d
3  b  d

如果我有兴趣查找 v1 等于 a v2 等于 d <的行/ strong>,我可以使用:

> with(df,v1=="a" & v2=="d")
[1] FALSE  TRUE FALSE

如果我有兴趣查找 v1 不是 a v2 不是 d 我虽然这应该有效:

> with(df,v1!="a" & v2!="d")
[1] FALSE FALSE FALSE

然而,使用运算符似乎给出了我想要的结果,但我不明白为什么:

> with(df,v1!="a" | v2!="d")
[1]  TRUE FALSE  TRUE

显然我遗漏了一些基本的东西。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

正确弄清楚布尔运行情况的一种方法是,一方面分别替换值,另一方面替换另一方面,的AND()和OR()逻辑运算符。因此, 仅适用于第一个组件

with(df,v1=="a" & v2=="d")[1]理解为

with(df,v1!="a" & v2!="d")[1]

with(df,v1!="a" | v2!="d")[1]

其中符号$ \ neg $是逻辑否定,即逻辑不是

<小时/> 您可能想测试此方法的有效性

> FALSE*FALSE 
[1] 0
> FALSE*TRUE
[1] 0
> FALSE+TRUE
[1] 1

<小时/> 另请注意

实际上,

> TRUE+TRUE
[1] 2
> !!2
[1] TRUE