Combiner deux cadres de données dans R

  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

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 trame de données résultante, appelée z, par exemple. De telles trames de données pourraient être comme celles-ci :

Exemple de trame de données 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 trame de données y. Ceci peut être fait en exécutant cette commande :

y$b <- NA

Maintenant, la trame de données 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 trame de données 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 trame de données 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