如何用R批量处理同目录多文件并生成不同命名输出
R实现Excel批量处理脚本修改方案
核心逻辑
把单文件处理逻辑封装为函数,遍历输入目录下所有Excel文件,自动根据输入文件名生成对应输出文件名,无需手动修改路径和命名。
修改后的完整代码
# 加载依赖包 library(readxl) library(writexl) # 配置路径(仅需修改这两个路径) input_dir <- "C:/Users/thoma/Desktop/PATENTS EU/raw data/PC_PATENTS/patents input to code_48_PC/" output_dir <- "C:/Users/thoma/Desktop/PATENTS EU/CODE RESULTS/PATENTS_PC/48/" # 定义批量处理函数 process_excel <- function(file_path) { # 1. 读取单个Excel文件 data <- read_excel(file_path) # -------------------------- # 2. 执行你的数据处理流程(把原来生成C3、MCp等的代码放在这里) # 示例占位:假设这里是你原来的处理逻辑,最终生成C3、MCp、dfMPP、dfMCC、cmplx_Country_Ind_output、cmplx_product_Ind_output # C3 <- ... # MCp <- ... # dfMPP <- ... # dfMCC <- ... # cmplx_Country_Ind_output <- ... # cmplx_product_Ind_output <- ... # -------------------------- # 3. 提取输入文件名的核心标识(根据你的文件名规则调整) file_name <- basename(file_path) file_prefix <- tools::file_path_sans_ext(file_name) # 按示例规则提取年份并+1(输入2010→输出2011),若规则不同可自行修改 year_part <- as.integer(strsplit(file_prefix, "_")[[1]][1]) + 1 output_suffix <- paste0("_48_PC_", year_part, "_B.xlsx") # 4. 保存所有结果文件 write_xlsx(C3, paste0(output_dir, "2ndtable", output_suffix)) write_xlsx(MCp, paste0(output_dir, "RCA", output_suffix)) write_xlsx(dfMPP, paste0(output_dir, "MPP", output_suffix)) write_xlsx(dfMCC, paste0(output_dir, "MCC", output_suffix)) write_xlsx(cmplx_Country_Ind_output, paste0(output_dir, "cmplx_Country_Ind_output", output_suffix)) write_xlsx(cmplx_product_Ind_output, paste0(output_dir, "cmplx_product_Ind_output", output_suffix)) cat("已完成处理:", file_name, "\n") } # 获取输入目录下所有Excel文件的路径 excel_files <- list.files(input_dir, pattern = "\\.xlsx$", full.names = TRUE) # 批量处理所有文件 lapply(excel_files, process_excel)
关键说明
- 路径配置:仅需修改
input_dir和output_dir两个变量,指向你的输入文件夹和输出文件夹。 - 文件名适配:如果输入文件名格式不是
YYYY_xx_PC.xlsx,调整file_prefix和year_part的处理逻辑即可匹配你的命名规则。 - 处理流程嵌入:将你原来写的生成C3、MCp等变量的代码,替换掉函数中的占位注释部分。
- 批量执行:
list.files自动抓取输入目录下所有.xlsx文件,lapply遍历每个文件调用处理函数。
内容的提问来源于stack exchange,提问作者Thom Pana
相关产品推荐
相关产品推荐

