R语言初学者如何按Number分组计算V4、V92线性回归并生成新表
分组线性回归批量计算方案
tidyverse 实现(推荐初学者使用,代码可读性高)
需要用到dplyr做分组聚合,broom做回归结果结构化处理,使用步骤如下:
- 安装依赖包(首次使用时执行)
install.packages(c("dplyr", "broom"))
- 加载包并执行计算
library(dplyr) library(broom) # 替换df为你的原始数据表名 summary_table <- df %>% group_by(Number) %>% summarise( 分组样本量 = n(), # 拟合线性回归并将整个lm对象存入列表列 线性回归结果 = list(lm(V4 ~ V92, data = cur_data())) )
扩展用法
如果需要把回归结果的核心指标拆分为独立列,可修改summarise部分的代码:
summary_table <- df %>% group_by(Number) %>% summarise( 分组样本量 = n(), 截距 = tidy(lm(V4 ~ V92))$estimate[1], V92回归系数 = tidy(lm(V4 ~ V92))$estimate[2], 回归p值 = tidy(lm(V4 ~ V92))$p.value[2], 拟合R方 = glance(lm(V4 ~ V92))$r.squared )
基础R实现(无需安装额外包)
如果不想加载第三方包,可通过拆分数据集+批量迭代实现:
# 按Number字段拆分原始数据 split_df <- split(df, df$Number) # 批量计算回归并合并结果 summary_table <- do.call(rbind, lapply(split_df, function(sub_data) { lm_res <- lm(V4 ~ V92, data = sub_data) data.frame( Number = unique(sub_data$Number), 分组样本量 = nrow(sub_data), 线性回归结果 = I(list(lm_res)), row.names = NULL ) }))
结果查看
如果需要调取某一个Number对应的完整回归结果,执行以下代码即可:
# 替换target_num为你要查询的Number取值 target_res <- summary_table$线性回归结果[[which(summary_table$Number == target_num)]] print(target_res)
内容的提问来源于stack exchange,提问作者EamonS
相关产品推荐
相关产品推荐

