如何在R中合并多个数据框(附实例)

3,200 阅读1分钟

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

方法1:使用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)

方法2:使用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')

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

方法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