You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中按year自动合并数据框列表的方法(非ldply方式)

按Year自动合并Dataframe列表的自动化方案

我懂你要的是什么——不是把所有表的行堆在一起(那是ldply干的活),而是要像手动写merge(df1, df2, by="year")那样,把列表里的所有Dataframe按year列自动合并成一个表,不用一个个手动指定对吧?

给你两个实用的自动化方案,都是一行代码搞定所有表的合并:

基础R方案:用Reduce函数

Reduce可以把merge这个二元函数“迭代”应用到整个列表上——先合并前两个表,再把结果和第三个合并,直到所有表都处理完,完全自动化:

# 假设你的Dataframe列表叫ldf
merged_df <- Reduce(function(x, y) merge(x, y, by = "year"), ldf)

如果需要控制合并类型(比如保留所有年份,或者只保留共有的年份),可以加merge的参数:

  • 全连接(保留所有year的记录):
    merged_df <- Reduce(function(x, y) merge(x, y, by = "year", all = TRUE), ldf)
    
  • 左连接(以列表第一个表的year为准):
    merged_df <- Reduce(function(x, y) merge(x, y, by = "year", all.x = TRUE), ldf)
    

Tidyverse风格方案:用purrr::reduce + dplyr连接函数

如果你习惯用tidyverse的语法,用purrr::reduce配合dplyr的各种join函数会更直观:

library(purrr)
library(dplyr)

# 内连接(默认,只保留所有表共有的year)
merged_df <- ldf %>% reduce(inner_join, by = "year")

# 全连接(保留所有year的记录)
merged_df <- ldf %>% reduce(full_join, by = "year")

# 左连接(以列表第一个表的year为基准)
merged_df <- ldf %>% reduce(left_join, by = "year")

这两种方法都不用你手动逐个合并列表里的Dataframe,完全满足你要的自动化按year合并的需求~

内容的提问来源于stack exchange,提问作者msh855

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:32:24