R语言如何批量遍历文件夹CSV文件执行相同处理后按原名保存
现有代码的问题
- 未指定目标文件夹路径,也未筛选.csv后缀文件,会读入文件夹内所有类型文件引发报错
- 混用
lapply与for循环,逻辑冲突:lapply本身已承担遍历功能,内部嵌套for循环会导致每次迭代都重复读取全部文件,最终仅保留最后一个文件的处理结果 - 读取CSV时遗漏单文件逻辑中的
header=FALSE参数,会将首行数据识别为表头,和预期处理逻辑不一致 - 未做输出路径隔离,直接写入原路径会覆盖原始数据,一旦处理逻辑出错无法找回原文件
- 嵌套的for循环未添加花括号限定作用域,仅
read.csv行在循环执行范围内,后续处理步骤未参与循环
修正后代码
# 配置输入文件夹路径,替换为实际目标路径即可 input_dir <- "\\\\dcf.network\\data\\R\\Test Folder" # 单独创建输出文件夹存放处理后文件,避免覆盖原数据 output_dir <- file.path(input_dir, "processed") if (!dir.exists(output_dir)) dir.create(output_dir) # 仅提取文件夹内所有.csv后缀文件的完整路径 csv_files <- list.files( path = input_dir, pattern = "\\.csv$", full.names = TRUE ) # 批量处理 lapply(csv_files, function(file_path) { # 按单文件逻辑读取数据 df <- read.csv(file_path, header = FALSE) # 执行原有处理逻辑 df$V1 <- df$V2[3] df <- df[!(df$V9 == ""), ] keep_cols <- c("V1","V2","V3","V4","V9") df <- df[keep_cols] # 保留原文件名输出到指定文件夹 write.csv( df, file = file.path(output_dir, basename(file_path)), row.names = FALSE ) })
使用说明
- 若确认需要直接覆盖原始文件,可将写入路径直接替换为原文件路径
file_path,但优先建议使用独立输出文件夹留存原始数据 - 写入文件时添加
row.names = FALSE参数,避免输出文件自动生成多余的行号列 - 正则规则
\\.csv$会严格匹配后缀为.csv的文件,避免误读其他格式文件
内容的提问来源于stack exchange,提问作者YungCreator
相关产品推荐
相关产品推荐

