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)
原代码快速修复方案
如果不需要扩展能力,仅让原有逻辑跑通,只需修改两处即可:
- 每个
map_df调用前给sheets向量命名,让.id输出实际表名:sheets <- set_names(excel_sheets(path)) - 最后合并行时使用正确的变量名:
dft <- rbind(df3, df4, df5)
内容的提问来源于stack exchange,提问作者Nana
相关产品推荐
相关产品推荐

