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

如何用Purrr的reduce合并R中data.frame对象?合并失败求助

问题原因与解决办法

你的代码失败的核心原因:ls(pattern='data')拿到的是对象名称的字符串,转成list后还是一堆字符串,并不是实际的data.frame对象。reduce调用rbind时,没法对字符串执行合并操作,自然报错。

下面是几种便捷的解决方式:

方法1:用mget直接获取数据框列表(推荐)

mget可以根据字符串向量,批量取出对应的对象,直接得到data.frame组成的列表,再合并就没问题了:

library(tidyverse)
# 你的测试数据生成代码(保留)
for (i in c(1:20)){
  assign(paste0('data_',i),data.frame(category=c('a','b'),sales=c(1,2)))
}

# 精准匹配data_开头加数字的对象,避免误抓其他含data的对象
data_list <- mget(ls(pattern='^data_\\d+$'))
# 用reduce合并,或者直接用tidyverse的bind_rows更高效
data_total <- reduce(data_list, rbind)
# 更简洁的写法:
# data_total <- bind_rows(data_list)

方法2:用get配合map转换字符串到对象

如果习惯用map操作,可以先拿到对象名字符串,再逐个用get取出实际对象:

objects <- ls(pattern='^data_\\d+$')
data_list <- map(objects, get)
data_total <- reduce(data_list, rbind)

补充说明

  • 用^data_\\d+$作为匹配模式,是为了精准匹配data_1到data_20这类对象,避免误匹配其他名字里带data的对象(比如如果有个叫data_temp的变量,就不会被抓进来)。
  • bind_rows是tidyverse提供的合并函数,比基础的rbind更灵活,能自动处理列名不一致的情况,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:52:13