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