R语言如何批量读取指定CSV文件、筛选行列后合并为数据框
R语言批量处理年度CSV文件并自动合并方案
核心逻辑是把单文件读取、裁剪、合并的流程封装为自动化步骤,无需手动逐个声明数据框,自动适配任意数量的结果文件。
完整实现代码
# 无需额外安装第三方包,基于R基础函数实现 # -------------------------- # 1. 抓取目录下所有目标CSV文件 # -------------------------- file_list <- list.files( path = "C:/your/result/csv/path", # 替换为你的CSV文件存放目录,R中路径请使用正斜杠/ pattern = "^data_\\d+\\.csv$", # 正则匹配文件名规则:仅识别data_+数字.csv格式的结果文件,过滤无关文件 full.names = TRUE # 自动补全文件完整路径,无需手动拼接 ) # -------------------------- # 2. 定义单文件处理规则 # -------------------------- process_csv <- function(file) { # 严格保留原有读取参数:跳过首行、读取表头 raw_df <- read.csv(file, header = TRUE, skip = 1) # 按原有规则截取行列:前365行,第2/4/6/8/10列 cut_df <- raw_df[1:365, c(2, 4, 6, 8, 10)] # 可选:新增列标记数据来源文件,后续核对数据更方便 cut_df$source_file <- basename(file) return(cut_df) } # -------------------------- # 3. 批量处理+自动合并 # -------------------------- # 自动遍历所有匹配到的文件,逐次执行处理逻辑 processed_list <- lapply(file_list, process_csv) # 一次性按行合并所有处理完的片段 total <- as.data.frame(do.call(rbind, processed_list))
关键问题适配说明
- 目标文件筛选:通过
list.files的pattern参数用正则规则匹配文件名,只会读取符合命名规则的结果文件,不会混入目录下其他无关CSV。如果你的文件名规则有变化,直接修改pattern的匹配规则即可,比如要匹配所有以year_record开头的CSV,可改为pattern = "^year_record.*\\.csv$"。 - 跳过首行要求:
skip=1参数直接写入统一的读取逻辑中,所有文件读入时都会自动执行跳过首行的操作,不会出现遍历读取时漏设参数的问题。 - 文件数量自适应:整个流程不需要提前声明文件数量,不管模型生成3个还是50个结果文件,只要存放在指定目录、符合文件名匹配规则,直接运行代码即可完成全流程处理,不需要手动修改rbind的拼接参数。
可选优化提示
- 如果需要兼容闰年366天的数据,可将行截取逻辑改为
cut_df <- raw_df[1:min(366, nrow(raw_df)), c(2, 4, 6, 8, 10)],避免行数不足触发下标越界报错。 - 如果文件量较大(超过20个),可以将最后合并的代码替换为
data.table::rbindlist(processed_list),合并速度会有明显提升(需提前安装data.table包)。 - 如果担心个别文件损坏导致流程中断,可以在
read.csv外层添加tryCatch容错逻辑,出错时打印问题文件名即可跳过异常文件继续处理。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

