Comment fusionner plusieurs trames de données dans R (avec exemples)



Vous pouvez utiliser l’une des deux méthodes suivantes pour fusionner plusieurs blocs de données dans R :

Méthode 1 : utiliser Base R

#put all data frames into list
df_list <- list(df1, df2, df3)

#merge all data frames in list
Reduce(function(x, y) merge(x, y, all=TRUE), df_list)

Méthode 2 : utiliser Tidyverse

library(tidyverse)

#put all data frames into list
df_list <- list(df1, df2, df3)

#merge all data frames in list
df_list %>% reduce(full_join, by='variable_name')

Les exemples suivants montrent comment utiliser chaque méthode dans la pratique.

Méthode 1 : fusionner plusieurs blocs de données à l’aide de Base R

Supposons que nous ayons les trames de données suivantes dans R :

#define data frames
df1 <- data.frame(id=c(1, 2, 3, 4, 5),
                  revenue=c(34, 36, 40, 49, 43))

df2 <- data.frame(id=c(1, 2, 5, 6, 7),
                  expenses=c(22, 26, 31, 40, 20))

df3 <- data.frame(id=c(1, 2, 4, 5, 7),
                  profit=c(12, 10, 14, 12, 9))

Nous pouvons utiliser la syntaxe suivante pour fusionner toutes les trames de données à l’aide des fonctions de la base R :

#put all data frames into list
df_list <- list(df1, df2, df3)      

#merge all data frames together
Reduce(function(x, y) merge(x, y, all=TRUE), df_list)  

  id revenue expenses profit
1  1      34       22     12
2  2      36       26     10
3  3      40       NA     NA
4  4      49       NA     14
5  5      43       31     12
6  6      NA       40     NA
7  7      NA       20      9

Notez que chacune des valeurs « id » de chaque bloc de données d’origine est incluse dans le bloc de données final.

Méthode 2 : fusionner plusieurs blocs de données à l’aide de Tidyverse

Supposons que nous ayons les trames de données suivantes dans R :

#define data frames
df1 <- data.frame(id=c(1, 2, 3, 4, 5),
                  revenue=c(34, 36, 40, 49, 43))

df2 <- data.frame(id=c(1, 2, 5, 6, 7),
                  expenses=c(22, 26, 31, 40, 20))

df3 <- data.frame(id=c(1, 2, 4, 5, 7),
                  profit=c(12, 10, 14, 12, 9))

Nous pouvons utiliser la syntaxe suivante pour fusionner toutes les trames de données à l’aide des fonctions de Tidyverse – une collection de packages conçus pour la science des données dans R :

library(tidyverse)

#put all data frames into list
df_list <- list(df1, df2, df3)      

#merge all data frames together
df_list %>% reduce(full_join, by='id')

  id revenue expenses profit
1  1      34       22     12
2  2      36       26     10
3  3      40       NA     NA
4  4      49       NA     14
5  5      43       31     12
6  6      NA       40     NA
7  7      NA       20      9

Notez que la trame de données finale correspond à la trame de données que nous avons produite à l’aide de la première méthode.

Remarque : L’approche Tidyverse sera sensiblement plus rapide si vous travaillez avec des trames de données extrêmement volumineuses.

Ressources additionnelles

Les didacticiels suivants expliquent comment exécuter d’autres fonctions courantes dans R :

Comment fusionner des blocs de données basés sur plusieurs colonnes dans R
Comment empiler des colonnes de blocs de données dans R
Comment utiliser anti_join dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *