web-dev-qa-db-fra.com

Comment trouver des éléments communs à partir de plusieurs vecteurs?

Quelqu'un peut-il me dire comment trouver les éléments communs à partir de plusieurs vecteurs?

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

Je veux obtenir les éléments communs des vecteurs ci-dessus (ex: 3 et 9)

136
Chares

Il y aurait peut-être une façon plus intelligente de s'y prendre, mais

intersect(intersect(a,b),c)

fera le travail.

EDIT: Plus intelligemment et plus facilement si vous avez beaucoup d’arguments:

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

Une bonne réponse déjà, mais il y a deux autres façons de le faire:

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

ou,

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

Vous pouvez évidemment omettre les appels unique si vous savez qu'il n'y a pas de valeurs répétées dans a, b ou c.

17
James
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)

UPDATE EDIT Un code plus simple

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

intersect_all(a,b,c)
5