假设我有一个如下所示的数据框:
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 < strong> 不是 d 我虽然这应该有效:
> with(df,v1!="a" & v2!="d")
[1] FALSE FALSE FALSE
然而,使用或运算符似乎给出了我想要的结果,但我不明白为什么:
> with(df,v1!="a" | v2!="d")
[1] TRUE FALSE TRUE
显然我遗漏了一些基本的东西。有人能指出我正确的方向吗?
答案 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