基于参考表批量重命名Excel文件并在R中重构数据列
批量处理Excel文件:重命名或合并时替换Location列(R实现)
针对192个设备SN命名的xlsx文件,结合原文件名-新文件名参考表,提供两种高效解决方案:
方案一:批量重命名文件
直接修改原文件名称,适合需要保留重命名后文件的场景:
- 读入参考表(假设参考表保存为
ref_table.xlsx) - 构建原文件名(带
.xlsx后缀)与新文件名的对应关系 - 循环执行重命名操作
library(readxl) # 读取参考表 ref_table <- read_xlsx("ref_table.xlsx") # 补充文件后缀,生成完整文件名 ref_table$old_full <- paste0(ref_table$`SN Number`, ".xlsx") ref_table$new_full <- paste0(ref_table$new, ".xlsx") # 批量重命名,不存在的文件会给出警告 for(i in 1:nrow(ref_table)) { if(file.exists(ref_table$old_full[i])) { file.rename(ref_table$old_full[i], ref_table$new_full[i]) } else { warning(paste("跳过不存在的文件:", ref_table$old_full[i])) } }
方案二:合并数据时直接替换Location列
无需修改原文件,在数据合并阶段直接将原文件名替换为新名称,更适合仅需处理数据的场景:
library(readxl) # 读取参考表 ref_table <- read_xlsx("ref_table.xlsx") # 获取当前目录下所有xlsx文件(含完整路径) files <- list.files(path = ".", pattern = "\\.xlsx$", full.names = TRUE) # 定义读取单个文件并添加location列的函数 read_with_location <- function(file_path) { # 读取文件内容 df <- read_xlsx(file_path) # 提取不带后缀的原文件名 old_name <- tools::file_path_sans_ext(basename(file_path)) # 匹配对应的新名称,匹配不到则保留原名称 new_name <- ref_table$new[ref_table$`SN Number` == old_name] df$location <- if(length(new_name) > 0) new_name else old_name return(df) } # 批量读取并合并所有文件 BF_soil_temp_21 <- do.call(rbind, lapply(files, read_with_location)) # 调整列顺序至期望结构 BF_soil_temp_21 <- BF_soil_temp_21[, c("Date/Time", "Unit", "Value", "location")]
说明
- 方案一修改原文件,后续合并时直接用新文件名作为location即可
- 方案二不改动原文件,直接在数据层面完成替换,避免误操作原文件的风险
内容的提问来源于stack exchange,提问作者nmd17
相关产品推荐
相关产品推荐

