如何在 r 中合并多个数据框(附示例)


您可以使用以下两种方法之一来合并 R 中的多个数据框:

方法一:使用Base R

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

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

方法2:使用Tidyverse

 library (tidyverse)

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

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

以下示例展示了如何在实践中使用每种方法。

方法1:使用Base R合并多个数据帧

假设我们在 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))

我们可以使用以下语法使用 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

请注意,来自每个原始数据块的每个“id”值都包含在最终数据块中。

方法 2:使用 Tidyverse 合并多个数据帧

假设我们在 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))

我们可以使用以下语法来使用Tidyverse中的函数合并所有数据框——Tidyverse 是为 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

请注意,最终的数据帧与我们使用第一种方法生成的数据帧匹配。

注意:如果您正在处理非常大的数据帧,Tidyverse 方法会明显更快。

其他资源

以下教程解释了如何在 R 中执行其他常见功能:

如何在R中基于多列合并数据框
如何在 R 中堆叠数据框列
如何在 R 中使用 anti_join

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注