R语言中如何一次性合并多个行数不同的data.frame?
R多数据框批量合并方案
你可以借助purrr包的reduce()函数批量迭代执行连接操作,无需手动编写多次两两连接代码,支持任意数量的数据框合并。
完整实现代码
# 加载依赖包(dplyr提供连接函数,purrr提供reduce迭代函数) library(tidyverse) # 示例数据 df1<-data.frame(s=c(1,2,3,4,5,6,7), x=c('a','b','c','d','e', 'f', 'g')) df2<-data.frame(k=c(6,7,8,9), x=c('a','b','c','d')) df3<-data.frame(y=c(10,11,12,13,14), x=c('f','g','h','i','j'), u=c(8,7,4,5,3)) df4<-data.frame(z=c(8,7,9,1,3,4,6,2), x=c('a','b','c','d','f','e','h', 'j')) df_aaa<-data.frame(w=c(1000,500), x=c('a','b')) ghj_df<-data.frame(q=c(36,32,31,35,34,34,31,35,36), x=c('a','b','c','d','e','f','g','h','j')) # 1. 把所有需要合并的数据框放入列表 df_list <- list(df1, df2, df3, df4, df_aaa, ghj_df) # 2. 迭代执行内连接,公共列为x inner_result <- reduce(df_list, inner_join, by = "x") # 如果需要全连接(保留所有行,缺失值填NA),替换为full_join即可 full_result <- reduce(df_list, full_join, by = "x")
结果说明
- 内连接
inner_join返回的是所有数据框的公共列x中都存在的观测,示例中只有x=a、x=b满足要求,最终得到2行7列的结果。 - 全连接
full_join返回所有x的取值,对应数据没有的字段填充NA,最终得到10行7列的结果。 - 如果需要其他连接逻辑,替换
inner_join为left_join、right_join即可;多公共列的场景下把by参数改为字符向量即可,例如by = c("id", "date")。
内容的提问来源于stack exchange,提问作者wesleysc352
相关产品推荐
相关产品推荐

