R语言如何批量遍历CSV文件循环执行线性回归并保存系数结果
实现思路
- 提前将R工作目录切换到存放所有CSV文件的文件夹,统一获取所有符合命名规则的CSV文件路径,同时修正默认字符串排序的逻辑,保证文件读取顺序和name1、name2……的命名顺序完全一致
- 梳理单文件处理逻辑:读入CSV数据 -> 运行线性回归模型 -> 提取需要的回归指标(截距、自变量系数、模型拟合优度、系数显著性p值等)
- 遍历所有文件批量执行上述处理逻辑,将每个文件的回归结果逐行汇总到同一张结果表,最终导出为汇总文件即可
参考代码
运行前把代码里的columnX、columnY替换成你CSV里实际的自变量、因变量列名即可。
# 若未安装tidyverse,先运行下一行代码安装 # install.packages("tidyverse") library(tidyverse) # 批量获取所有name开头带数字的CSV文件,按文件名里的数字升序排列 all_csv_files <- list.files(pattern = "^name\\d+\\.csv$") |> tibble(file_path = .) |> mutate(file_index = as.numeric(str_extract(file_path, "\\d+"))) |> arrange(file_index) |> pull(file_path) # 初始化空结果表,按需增减要存的指标列 result_table <- tibble( source_file = character(), intercept = numeric(), x_slope = numeric(), r_squared = numeric(), x_p_value = numeric() ) # 循环遍历每个文件跑回归 for (file in all_csv_files) { # 读入当前CSV df <- read.csv(file, fileEncoding = "UTF-8") # 拟合线性回归,替换成你自己的列名 model <- lm(columnY ~ columnX, data = df) model_summary <- summary(model) # 把当前文件的结果追加到总结果表 result_table <- result_table |> add_row( source_file = file, intercept = coef(model)[[1]], x_slope = coef(model)[[2]], r_squared = model_summary$r.squared, x_p_value = model_summary$coefficients[2,4] ) } # 导出所有回归的汇总结果 write.csv(result_table, "线性回归批量结果汇总.csv", row.names = FALSE, fileEncoding = "UTF-8")
注意事项
- 运行前务必确认工作路径正确,可通过
getwd()查看当前路径,通过setwd("你的CSV文件夹本地路径")切换到目标目录 - 文件名排序做了数值化处理,不会出现字符串排序默认的「name10排在name2前面」的顺序错乱问题,和你文件的命名顺序完全匹配
- 如果需要提取更多回归指标(比如调整后R²、残差标准误、模型F检验p值),只需要在初始化结果表时新增对应列,在追加结果的部分从
model_summary里提取对应值填入即可 - 要是觉得循环速度慢,可以把循环部分替换为
purrr::map_dfr实现,核心逻辑完全一致,运行效率更高
内容的提问来源于stack exchange,提问作者Cucumber
相关产品推荐
相关产品推荐

