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)
c(1,2...)
.
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)
c(1,2...)
.
Réponses:
Il y a peut-être une manière plus intelligente de procéder, 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))
Reduce
et la bonne capitalisation R!
intersect
c'est pour les opérations d'ensemble. Si vous avez des éléments récurrents dans les vecteurs, vous perdrez cette information car les vecteurs sont transformés en ensembles avant l'intersection. Par exemple, intersect(c(1,1,2,3), c(1,1,3,4))
cela aboutirait c(1,3)
, et vous auriez peut-être voulu le résultat c(1,1,3)
.
N <- max(unlist(L)); LT <- lapply(L, tabulate, nbins = N); v <- do.call(pmin, LT); unlist(sapply(1:N, function(x) rep(x, v[x])))
Une autre façon de faire cela consisterait à utiliser la match
fonction avec un indice négatif pour supprimer itérativement de chacun des vecteurs chaque élément ajouté au "noyau".
Une bonne réponse déjà, mais il existe plusieurs 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 unique
appels si vous savez qu'il n'y a pas de valeurs répétées dans a
, b
ou c
.
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)
c
comme nom de variable ...