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

在R中合并35个相似数据框的简便方法咨询

合并多个相似数据框的简化方法

方法1:用tidyverse的reduce函数(最简洁)

先把所有目标数据框存入一个列表,再通过reduce函数依次执行全连接,替代嵌套的full_join:

# 匹配所有以cnty开头、后跟两位数字的数据框,存入列表
cnty_list <- mget(ls(pattern = "^cnty\\d{2}$"))

# 依次对列表内数据框执行full_join
counties_9022 <- purrr::reduce(cnty_list, dplyr::full_join)

如果需要指定固定连接键(避免自动匹配所有列导致的问题),可添加by参数:

counties_9022 <- purrr::reduce(cnty_list, dplyr::full_join, by = c("fips_code", "industry_code"))

方法2:Base R的for循环实现

若偏好基础R语法,可通过循环完成合并:

# 获取所有目标数据框的名称
cnty_names <- ls(pattern = "^cnty\\d{2}$")
# 初始化结果为第一个数据框
counties_9022 <- get(cnty_names[1])

# 循环合并剩余数据框(merge的all=TRUE等价于full_join)
for (name in cnty_names[-1]) {
  counties_9022 <- merge(counties_9022, get(name), all = TRUE)
  # 指定连接键的写法:
  # counties_9022 <- merge(counties_9022, get(name), all = TRUE, by = c("fips_code", "industry_code"))
}

额外优化:批量读取文件(省略手动命名步骤)

既然数据源是统一格式的BLS县级文件,可直接批量读取文件夹内的目标文件,无需手动逐个命名cnty90、cnty91等变量:

library(tidyverse)

# 获取目标文件夹内所有符合格式的文件路径
file_paths <- list.files(path = "你的文件存放路径", pattern = ".*county.*\\.csv$", full.names = TRUE)

# 批量读取并一次性合并
counties_9022 <- file_paths %>%
  map(read_csv) %>%  # 若为其他格式,替换为read.delim/read.table等
  reduce(full_join, by = c("fips_code", "industry_code"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:23:20