R中两个向量的差异

49

我有两个向量:

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

我想找出第二个向量中不在第一个向量中的数字:

dif <- c(2, 6, 8)

我已经尝试了许多不同的方法(例如合并,不同类型的连接(dplyr包),setdiff,比较(compare包)),但仍然找不到方法。

3个回答

75
您可以使用setdiff
setdiff(b,a)
#[1] 2 6 8

setdiff(1:3,2:4) 的结果是:> 1 - stakowerflol
对我来说,期望值是1和4。 - stakowerflol
2
@stakowerflol setdiff 给出了第一个与第二个的差异。如果你想要两者,那么你可能需要使用 union 和 setdiff。 - akrun

19

除了使用可能更好的setdiff之外,另一种替代方法是使用%in%

unique(b[! b %in% a])
#[1] 2 6 8

嗨@nico,unique(b[! b %in% a] 对于这个例子非常有效。但是,请问您是否看到任何原因,为什么当更改向量 a = c(4,2,3)b = c(2,3) 时我得到了 numeric(0) 的答案?这对我来说没有意义。 - maycca
1
@maycca,你的输出是正确的。它显示了在b中而不在a中的元素,这是一个空集。 - Saeed

1

这个问题已经得到了确切的回答,但如果有人想要查找两个列表之间没有共享的所有元素,则以下是答案:

union(setdiff(a,b), setdiff(b,a))

这里的'a'和'b'可以是类似于

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接