r - 当向量的项不匹配时使用 which 和 %in%

标签 r

假设我有三个向量,我想比较它们以查看每个向量的元素不在其他向量中,首先要与“c”进行比较。

a<-c(1,2,7,8)
b<-c(1,2,3,4)
c<-c(3,4,5,6)

所以这就像我期望的那样工作(1 和 2 在“b”中,但不在“c”中)

b[-which(b%in%c)]

返回:

[1] 1 2

但这并没有告诉我哪个“a”不在“c”中(全部,即 1,2,7,8),而是给了我一个没有任何内容的数字向量。

a[-which(a%in%c)]

返回:

integer(0)

看起来像 this answer最终会做我想做的事,但是我对 which%in% 的使用方式有什么误解?更好的是,我如何得到答案

[1] 1 2 7 8

当没有一个“a”在“c”中时,哪个“a”不在“c”中?

最佳答案

使用逻辑运算更可靠:

b[!b %in% c]
# [1] 1 2
a[!a %in% c]
# [1] 1 2 7 8

请注意,!a %in% c!(a %in% c) 相同。这样我们问a中的哪一个在c中,得到一个逻辑结果,取反。另一方面,使用 which 的工作方式不同:在 -which(a %in% c) 中,我们还首先得到一个逻辑向量 a %in% c 然后 which 给出 a 中属于 c 的元素的 indices,然后摆脱那些元素。在你的情况下,我们有

which(a %in% c)
# integer(0)

那么你可能会争辩说 a[-numeric(0)] 也应该返回

# [1] 1 2 7 8

但在 R 中不是这样。

关于r - 当向量的项不匹配时使用 which 和 %in%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834767/

相关文章:

r - 广义线性混合模型中的事后测试 : how to do?

R 循环 : How can I determine the iteration that caused warnings?

r - 如何找到 R 中 GEV 分布中给定值的累积概率?

r - 捕获无法捕获的错误

r - 如何通过关闭浏览器窗口来停止运行 Shiny 的应用程序?

r - 根据 R 中的另一列创建类别列

r - R 中带有子集的 For 循环

r - 使用混合数据连接多个表

r - as.data.frame.default(data) : cannot coerce class ""formula""to a data. 帧中出现错误

r - "could not find function"仅在 R 调试器中时