如何从多个向量中找到共同元素?

时间:2010-09-12 16:52:59

标签: r vector

有谁能告诉我如何从多个向量中找到共同元素?

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

我想从上面的向量中得到共同的元素(例如:3和9)

3 个答案:

答案 0 :(得分:277)

可能有一种更聪明的方法可以解决这个问题,但

intersect(intersect(a,b),c)

将完成这项工作。

编辑:如果你有很多争论,那就更聪明,更方便:

Reduce(intersect, list(a,b,c))

答案 1 :(得分:16)

已经有了一个很好的答案,但还有其他几种方法可以做到这一点:

unique(c[c%in%a[a%in%b]])

,或者

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

如果您知道uniqueab中没有重复的值,则显然可以省略c来电。

答案 2 :(得分:4)

intersect_all <- function(a,b,...){
  all_data <- c(a,b,...)
  require(plyr)
  count_data<- length(list(a,b,...))
  freq_dist <- count(all_data)
  intersect_data <- freq_dist[which(freq_dist$freq==count_data),"x"]
  intersect_data
}


intersect_all(a,b,c)

更新编辑 一个更简单的代码

intersect_all <- function(a,b,...){
  Reduce(intersect, list(a,b,...))
}

intersect_all(a,b,c)