R语言如何对Excel各工作表执行row_to_names后合并多表
实现方案
将你已验证的单工作表处理逻辑封装为自定义函数,遍历所有工作表时对每个表调用该函数,处理完成后自动合并即可。
完整代码
# 加载所需依赖包 library(tidyverse) library(readxl) library(janitor) # row_to_names函数来自该包,未安装可先运行install.packages("janitor") # 封装单工作表处理逻辑,完全复用你已验证的操作a逻辑 process_sheet <- function(sheet_name, file) { # 读取单个工作表,此时原A1单元格的id会成为第一列的默认列名 df <- read_xlsx(file, sheet = sheet_name) # 提取原A1存储的id值 sheet_id <- colnames(df)[1] # 执行表头转换+新增id列操作 processed_df <- df %>% row_to_names(1) %>% mutate(id = sheet_id) return(processed_df) } # 合并所有处理后的工作表 file_path <- "mydata.xlsx" combined <- excel_sheets(file_path) %>% map_df(~process_sheet(.x, file = file_path))
补充说明
- 如果你习惯使用
openxlsx包读取文件,只需将read_xlsx替换为read.xlsx即可,函数内部处理逻辑不需要调整 - 如果合并时出现列类型冲突报错,可以在
mutate(id = sheet_id)后新增一行mutate(across(everything(), as.character))先统一所有列的类型为字符型,合并后再按需转换类型 - 最终输出的
combined即为所有工作表处理完成后的合并数据集
内容的提问来源于stack exchange,提问作者adame
相关产品推荐
相关产品推荐

