Как найти общие элементы из нескольких векторов? - PullRequest
132 голосов
/ 12 сентября 2010

Может кто-нибудь сказать мне, как найти общие элементы из нескольких векторов?

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 ]

281 голосов
/ 12 сентября 2010

Возможно, есть более разумный способ сделать это, но

intersect(intersect(a,b),c)

выполнит эту работу.

РЕДАКТИРОВАТЬ: более умно и удобнее, если у вас много аргументов:

Reduce(intersect, list(a,b,c))
17 голосов
/ 13 сентября 2010

Хороший ответ уже есть, но есть несколько других способов сделать это:

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

или

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

Вы можете явно пропустить вызовы unique, если знаете, что в пределах a, b или c.

нет повторяющихся значений.
5 голосов
/ 27 мая 2016
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...