You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 05:06:01