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

如何优雅合并名称相似的DataFrame并添加来源标识列?

通用优雅的DataFrame批量合并方案

核心思路

利用mget()批量获取所有匹配命名规则的DataFrame,再结合purrr系列函数完成合并并自定义来源标识,完全适配周数动态变化的场景。


方案1:从原DataFrame名称中提取week标识

如果你的DataFrame命名本身包含week信息(例如Dai15_Dai3_week1、Dai15_Dai3_week2),直接通过字符串处理提取标识:

library(tidyverse)

# 批量获取所有以"Dai15_Dai3_"开头的DataFrame
target_dfs <- mget(ls(pattern = "^Dai15_Dai3_"))

# 合并并添加自定义来源列
combined_df <- imap_df(target_dfs, function(df, df_name) {
  df %>% mutate(source = str_remove(df_name, "^Dai15_Dai3_"))
})
  • ls(pattern = "^Dai15_Dai3_"):精准匹配所有符合命名前缀的对象名
  • imap_df():同时遍历DataFrame列表和对应的名称,df_name就是原DataFrame的名称
  • str_remove():剔除固定前缀,直接得到week1/week2这类目标标识

方案2:按顺序生成week标识

如果原DataFrame名称不含week信息(例如Dai15_Dai3_data1、Dai15_Dai3_data2),可按列表顺序自动生成week1/week2:

library(tidyverse)

target_dfs <- mget(ls(pattern = "^Dai15_Dai3_"))

# 按列表顺序生成week标识并合并
combined_df <- map2_df(
  .x = target_dfs,
  .y = paste0("week", seq_along(target_dfs)),
  .f = function(df, label) df %>% mutate(source = label)
)
  • seq_along(target_dfs):根据列表长度生成连续序号
  • map2_df():将每个DataFrame和对应的自定义标识一一绑定合并

优势说明

  • 动态适配:新增/减少符合规则的DataFrame时,无需修改代码
  • 灵活复用:仅需根据实际命名规则调整字符串处理逻辑(比如用str_extract()提取特定片段)
  • 风格统一:遵循tidyverse的管道式编程,可读性和维护性强

内容的提问来源于stack exchange,提问作者Jackson A Swan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:35:46