在R中查找从列表到矢量的重复值

时间:2014-08-22 18:13:46

标签: r vector

我有这个示例数据

a<-c(1,5,7,8,10,15)
b<-c(2,6,7,9,10,20,31)

我需要找到重复的值(两个向量中的值)并创建包含这些数字的新向量。它看起来应该是

c<-c(7,10)

由于载体长度不同,我试图将它们放入载体列表

l<-list(a=a,b=b)

并尝试了

duplicated(l)

duplicated(a,b)

但它给出了无意义的输出。我正在寻找正确的解决方案,但我仍然无法找到。有什么建议吗?

4 个答案:

答案 0 :(得分:4)

看起来像intersect()

的工作
a<-c(1,5,7,8,10,15)
b<-c(2,6,7,9,10,20,31)
c<-intersect(a,b)
c
[1]  7 10

答案 1 :(得分:3)

c(a, b)[duplicated(c(a, b))]

产生

[1]  7 10
应用于向量的

duplicated返回相同长度的逻辑向量,对于先前已在向量中出现的每个值,TRUE。您可以使用它来对原始矢量进行子集化。

请注意,如果您不关心单个向量中是否重复值,则应执行以下操作:

a.b <- c(unique(a), unique(b))
a.b[duplicated(a.b)]

答案 2 :(得分:2)

保持在原始问题的范围内,

您可以使用match

> b[!is.na(match(a, b))]
# [1]  7 10

或更简单地说,%in%

> b[a %in% b]
# [1]  7 10

答案 3 :(得分:0)

通过创建

等功能解决
duplicated_values<-function(x){
if(x%in%b){
return(x)
}
}
values<-mclapply(c(1:length(a)),duplicated_values)