Quelqu'un peut-il me dire comment trouver les éléments communs 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).
Quelqu'un peut-il me dire comment trouver les éléments communs 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).
Il convient de noter que intersect
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))
aurait pour conséquence c(1,3)
et vous auriez pu vouloir le résultat c(1,1,3)
.
Une bonne réponse déjà, mais il y a quelques autres façons de 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 le unique
si vous savez qu'il n'y a pas de valeurs répétées à l'intérieur de a
, b
o 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)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
54 votes
Ce n'est pas une bonne idée d'utiliser
c
comme nom de variable...5 votes
Pourquoi est-ce une lettre comme les autres ?
14 votes
@DimitriPetrenko parce que vous pouvez déclarer des listes avec
c(1,2...)
.