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

如何将分组回归后的列表合并为含列表名(cyl列)的DataFrame?

解决方案:将分组回归结果合并为带分组标识的DataFrame

你已经按cyl字段拆分mtcars数据集并完成分组线性回归,通过broom::tidy()得到了以cyl值为名称的结果列表,以下几种方法可以帮你将这些列表合并为单个DataFrame,并把原列表名作为cyl列的值对应到每行数据:

方法1:使用dplyr的bind_rows(兼容现有结果列表)

如果你已经保存了回归结果列表,可以直接用bind_rows()的.id参数提取列表名作为新列:

library(dplyr)
library(broom)

# 你的原有代码生成结果列表
reg_results <- lapply(split(mtcars, mtcars$cyl), \(x) lm(mpg ~ disp, data = x)) |>
  lapply(\(x) tidy(x))

# 合并列表并添加cyl列,同时转成数值型
combined_df <- bind_rows(reg_results, .id = "cyl") |>
  mutate(cyl = as.numeric(cyl))

# 查看最终结果
combined_df

方法2:使用purrr的map_dfr(一步完成)

用map_dfr()可以直接在分组回归后完成合并,无需单独保存中间列表,代码更简洁:

library(purrr)
library(broom)

combined_df <- mtcars |>
  split(.$cyl) |>
  map_dfr(\(x) tidy(lm(mpg ~ disp, data = x)), .id = "cyl") |>
  mutate(cyl = as.numeric(cyl))

combined_df

方法3:基础R实现

如果不想加载tidyverse包,用基础R也能实现:

library(broom)

# 生成回归结果列表
reg_results <- lapply(split(mtcars, mtcars$cyl), \(x) tidy(lm(mpg ~ disp, data = x)))

# 给每个子数据框添加cyl列
reg_results <- Map(function(df, cyl_val) {
  df$cyl <- as.numeric(cyl_val)
  df
}, reg_results, names(reg_results))

# 合并所有子数据框并重置行名
combined_df <- do.call(rbind, reg_results)
rownames(combined_df) <- NULL

combined_df

以上三种方法都能生成你期望的输出格式,其中tidyverse系列的方法更简洁易读,适合日常数据处理场景。

内容的提问来源于stack exchange,提问作者Ramakrishna S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:40:02