Combiner deux cadres de données dans R
-
Utilisez
rbind
pour combiner deux trames de données dans R -
Utilisez le paquet
dplyr
- Combinaison de grandes trames de données dans R
Lorsque nous manipulons des données avec le code R, nous sommes souvent confrontés à la nécessité de combiner deux trames de données en une seule. Ce tutoriel présente quelques méthodes permettant de combiner efficacement deux trames de données dans R.
Supposons que vous ayez deux trames de données, x
et y
, avec des colonnes correspondantes. Par exemple :
x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))
Et vous devez les combiner en une seule DataFrame résultante, appelée z
, par exemple. De telles trames de données pourraient être comme celles-ci :
Utilisez rbind
pour combiner deux trames de données dans R
La fonction rbind
combine des structures de données, telles que des cadres de données, des vecteurs ou des matrices, par lignes. Son nom signifie row-bind
.
Lorsque l’on utilise la fonction rbind
pour combiner deux trames de données, les deux trames de données doivent avoir les mêmes colonnes. Par conséquent, dans l’exemple précédent, vous devez ajouter la colonne b
à la DataFrame y
. Ceci peut être fait en exécutant cette commande :
y$b <- NA
Maintenant, la DataFrame y
doit ressembler à ceci :
Vous pouvez maintenant utiliser rbind
pour combiner les trames de données x
et y
dans la nouvelle DataFrame z
en exécutant cette commande :
x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))
y$b <- NA
z <- rbind(x, y)
Production :
a b c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814
Utilisez le paquet dplyr
Si vous ne voulez pas écrire une ligne de code supplémentaire ou ajouter des colonnes fictives à l’une des trames de données pour pouvoir utiliser rbind
, vous pouvez installer le paquet dplyr
et l’utiliser simplement :
z <- bind_rows(x, y)
Il remplit la DataFrame z
avec la combinaison de x
et y
.
Combinaison de grandes trames de données dans R
Les exemples précédents fonctionnent bien avec de petits cadres de données comportant quelques lignes et 2 ou 3 colonnes. Mais lorsque vous devez fusionner de grands ensembles de données comportant beaucoup de lignes et un nombre arbitraire de colonnes, il pourrait être préférable d’écrire une fonction qui fait le travail plus rapidement, comme la suivante :
quickmerge <- function(df1, df2) {
df1.names <- names(df1)
df2.names <- names(df2)
df2.add <- setdiff(df1.names, df2.names)
df1.add <- setdiff(df2.names, df1.names)
if(length(df2.add) > 0) {
for(i in 1:length(df2.add)) {
df2[df2.add[i]] <- NA
}
}
if(length(df1.add) > 0) {
for(i in 1:length(df1.add)) {
df1[df1.add[i]] <- NA
}
}
return(rbind(df1, df2))
}
Cette fonction commence par comparer les noms des colonnes dans les cadres de données, puis ajoute les colonnes nécessaires pour les rendre égales. Enfin, elle utilise la fonction rbind
pour combiner les lignes et renvoyer le résultat. Pour appeler la fonction, vous utilisez :
z <- quickmerge(x, y)
L’exemple de code complet est le suivant.
quickmerge <- function(df1, df2) {
df1.names <- names(df1)
df2.names <- names(df2)
df2.add <- setdiff(df1.names, df2.names)
df1.add <- setdiff(df2.names, df1.names)
if(length(df2.add) > 0) {
for(i in 1:length(df2.add)) {
df2[df2.add[i]] <- NA
}
}
if(length(df1.add) > 0) {
for(i in 1:length(df1.add)) {
df1[df1.add[i]] <- NA
}
}
return(rbind(df1, df2))
}
x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))
z <- quickmerge(x, y)
print(z)
Production :
a b c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814
Article connexe - R Data Frame
- Supprimer plusieurs colonnes dans R
- Créer un grand bloc de données dans R
- Fusionner deux trames de données avec un nombre différent de lignes dans R
- Supprimer les lignes en double par colonne dans R
- Trouver les valeurs absolues maximales par ligne dans le bloc de données dans R
- Nombre d'observations en R