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

在R中用grep提取数据框名并通过rbind批量合并数据框

解决方法

你的问题出在all_dat_df是存储数据框名称的字符向量,而rbind需要的是实际的数据框对象,直接传字符串肯定不行。下面是两种可行的解决方式:

方法一:base R原生方案

用mget把字符向量对应的实际数据框取出来,再通过do.call调用rbind完成合并:

  • mget(all_dat_df):根据字符串名称,把环境中对应的所有数据框提取为一个列表
  • do.call(rbind, ...):将rbind函数批量应用到列表的每个元素上,实现合并

完整代码:

dat1lkq6 <- data.frame(color = c('COLOR: RED', 'COLOR: RED', 'COLOR: BLUE', 'COLOR: GREEN', 'COLOR: BLUE'))
dat1ah2 <- data.frame(style = c('SPORTY', 'HYBRID', 'FORMAL', 'CASUAL', 'CASUAL'))
dat29fg <- data.frame(color = c('COLOR: RED', 'COLOR: CYAN', 'COLOR: BLUE', 'COLOR: RED', 'COLOR: BLUE'))
dat2xl <- data.frame(color = c('COLOR: RED', 'COLOR: CYAN', 'COLOR: BLUE', 'COLOR: RED', 'COLOR: BLUE'))
dat3g49 <- data.frame(color = c('COLOR: PURPLE', 'COLOR: RED', 'COLOR: BLUE', 'COLOR: GREEN', 'COLOR: BLUE'))
skus4 <- data.frame(sku = c('SKU: 1849354', 'SKU: 392856', 'SKU: 921385', 'SKU: 6395474', 'SKU: 8532449', 'SKU: 0285468', 'SKU: 2948327'))

# 提取以dat开头的数据框名称
all_dat_df <- base::ls(all.names = TRUE)[base::grep("^dat", base::ls(all.names = TRUE))]

# 合并数据框
merged_dat <- do.call(rbind, mget(all_dat_df))

# 验证结果:nrow(merged_dat) 会返回25,符合预期

方法二:tidyverse风格方案

如果你熟悉tidyverse工具链,可以用purrr包的map_dfr函数,一步完成提取+合并:

library(purrr)

merged_dat <- map_dfr(all_dat_df, get)

注意事项

因为你的数据框列名不完全一致(比如dat1ah2只有style列,其余是color列),合并后缺失的列会自动填充NA,这是正常行为,最终结果依然会是25行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:32