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

R语言导入多Excel工作簿全部工作表并新增表名列实现数据合并

R合并多Excel工作簿全工作表优化方案

原代码存在的问题

  • 变量名不一致:开头定义的Path大写,后续调用用小写path会触发变量未找到报错
  • 合并参数错误:最终rbind(P3,P4,P5)时调用的对象名和实际存储的df3/df4/df5不一致,运行报错
  • 工作表名记录错误:map_df的.id参数默认输出工作表的索引序号,不是实际工作表名称,不符合需求
  • 冗余代码过多:相同逻辑重复编写3次,新增工作簿时修改成本高
  • 无效变量:生成的sheets2变量全程未使用

优化后实现代码

首先需要提前加载依赖包:

library(tidyverse)
library(readxl)

核心实现逻辑:

# 1. 定义需要处理的所有Excel文件路径,后续新增文件直接在向量中添加即可
excel_files <- c("P3.xlsx", "P4.xlsx", "P5.xlsx")

# 2. 定义单个Excel文件的通用处理函数:读取所有工作表、加标识列、统一格式
process_single_excel <- function(file_path) {
  # 获取当前文件的所有工作表名称
  all_sheets <- excel_sheets(file_path)
  # 遍历工作表读取数据,新增工作表名列
  map_dfr(all_sheets, function(cur_sheet) {
    read_excel(file_path, sheet = cur_sheet) %>%
      mutate(
        Fecha = as.character(date),
        sheet_name = cur_sheet # 直接存储实际工作表名称,不需要依赖.id参数
        # 如有需要可以新增列记录所属工作簿:file_name = file_path
      )
  })
}

# 3. 批量处理所有文件,合并为最终数据框
final_merged_df <- map_dfr(excel_files, process_single_excel)

原代码快速修复方案

如果不需要扩展能力,仅让原有逻辑跑通,只需修改两处即可:

  1. 每个map_df调用前给sheets向量命名,让.id输出实际表名:
    sheets <- set_names(excel_sheets(path))
  2. 最后合并行时使用正确的变量名:
    dft <- rbind(df3, df4, df5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:15:03