85 votes

Fusionner un grand nombre de data.frames

Duplicata possible :
Fusionner simultanément plusieurs cadres de données dans une liste

exemple data.frames :

 df1 = data.frame(id=c('1','73','2','10','43'),v1=c(1,2,3,4,5)) <br>
 df2 = data.frame(id=c('7','23','57','2','62','96'),v2=c(1,2,3,4,5,6)) <br>
 df3 = data.frame(id=c('23','62'),v3=c(1,2)) <br>

Remarque : id est unique pour chaque data.frame. Je veux que la matrice résultante ressemble à

1      1 NA NA 
2      3  4 NA 
7      NA 1 NA 
10     4 NA NA 
23     NA 2  1 
43     5 NA NA 
57     NA 3 NA 
62     NA 5  2 
73     2 NA NA 
96     NA 6 NA

Dans ce cas, je ne montre que 3 ensembles de données, j'en ai en fait au moins 22, donc à la fin je veux une matrice de nx(22+1) où n est le nombre d'identifiants pour tous les 22 ensembles de données.

Étant donné 2 ensembles de données, je dois obtenir leur ids dans la première colonne et les 2e et 3e colonnes sont remplies avec les valeurs, s'il n'y a pas de valeur, alors l'entrée NA au lieu de cela.

200voto

Matthew Plourde Points 18649

Mettez-les dans un list et utiliser merge con Reduce

Reduce(function(x, y) merge(x, y, all=TRUE), list(df1, df2, df3))
#    id v1 v2 v3
# 1   1  1 NA NA
# 2  10  4 NA NA
# 3   2  3  4 NA
# 4  43  5 NA NA
# 5  73  2 NA NA
# 6  23 NA  2  1
# 7  57 NA  3 NA
# 8  62 NA  5  2
# 9   7 NA  1 NA
# 10 96 NA  6 NA

Vous pouvez également utiliser cette version plus concise :

Reduce(function(...) merge(..., all=TRUE), list(df1, df2, df3))

Prograide.com

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.

Powered by:

X