Combiner deux cadres de données dans R

Gustavo du Mortier 30 janvier 2023
  1. Utilisez rbind pour combiner deux trames de données dans R
  2. Utilisez le paquet dplyr
  3. Combinaison de grandes trames de données dans R
Combiner deux cadres 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 :

Exemple de DataFrame R

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 :

Exemple de cadre de données R

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