如何在R中使用循环对不同分组数据集执行线性回归分析?
R分层拆分数据集与批量拟合模型实现方案
方案1:基础R循环实现(完全匹配你的需求)
你可以通过列表存储拆分后的数据集和拟合的模型,无需手动逐个定义对象:
# 提取所有分层取值 strata_vals <- unique(df$strata) # 初始化存储列表 data_list <- list() model_list <- list() # 循环执行拆分与拟合 for (i in seq_along(strata_vals)) { # 拆分对应分层的数据集 data_list[[i]] <- subset(df, strata == strata_vals[i]) # 拟合线性模型 model_list[[i]] <- lm(y ~ x, data = data_list[[i]]) # 为列表元素命名,匹配你手动定义的对象名 names(data_list)[i] <- paste0("data_", strata_vals[i]) names(model_list)[i] <- paste0("model", strata_vals[i]) } # 可选:如果你需要把data_1、model1等单独作为全局对象使用,执行以下代码即可 list2env(data_list, envir = .GlobalEnv) list2env(model_list, envir = .GlobalEnv)
调用方式:
- 取strata=1的数据集:
data_list[["data_1"]] - 取strata=1的拟合模型:
model_list[["model1"]]
方案2:tidyverse风格实现(更简洁,适合批量分析)
如果你使用tidyverse生态的工具,可以不用显式编写循环,通过分组嵌套的方式实现,更适合后续批量提取模型结果:
library(dplyr) library(purrr) library(tidyr) df_result <- df %>% # 按分层字段分组 group_by(strata) %>% # 分组嵌套生成子数据集 nest() %>% # 批量对每个子数据集拟合模型 mutate(model = map(data, ~ lm(y ~ x, data = .x)))
调用方式:
- 取strata=3的数据集:
df_result$data[[df_result$strata == 3]] - 取strata=3的拟合模型:
df_result$model[[df_result$strata == 3]]
内容的提问来源于stack exchange,提问作者Muhammad Kamil
相关产品推荐
相关产品推荐

