【发布时间】:2015-10-12 21:59:12
【问题描述】:
我有两个向量:
a <- c(1, 1, 3, 4, 5, 7, 9)
b <- c(2, 3, 4, 6, 8, 2)
我想找到第二个向量中的数字,而不是第一个向量:
dif <- c(2, 6, 8)
我尝试了许多不同的方法(例如合并、不同类型的连接(dplyr 包)、setdiff、比较(比较包)),但我仍然找不到方法。
【问题讨论】:
我有两个向量:
a <- c(1, 1, 3, 4, 5, 7, 9)
b <- c(2, 3, 4, 6, 8, 2)
我想找到第二个向量中的数字,而不是第一个向量:
dif <- c(2, 6, 8)
我尝试了许多不同的方法(例如合并、不同类型的连接(dplyr 包)、setdiff、比较(比较包)),但我仍然找不到方法。
【问题讨论】:
您可以使用setdiff
setdiff(b,a)
#[1] 2 6 8
【讨论】:
setdiff(1:3,2:4) 结果:> 1
setdiff 给出了第一个与第二个的差异。如果你想要两者,那么你可能需要一个 union 和 setdiff
替代setdiff(这可能更可取)的替代方法是使用%in%
unique(b[! b %in% a])
#[1] 2 6 8
【讨论】:
unique(b[! b %in% a] 非常适合这个例子。但是,拜托,你看到我在更改向量a = c(4,2,3) 和b = c(2,3) 时得到numeric(0) 答案的任何原因吗?对我来说没有意义。独特的(b[!b %in% a])
已经回答了确切的问题,但是如果有人想找到两个列表之间未共享的所有元素,那么这就是答案:
union(setdiff(a,b), setdiff(b,a))
这里的“a”和“b”可能是这样的
a<-c(1,2,3,4,5)
b<-c(4,5,6,7,8)
【讨论】: