在R语言中按ID分组计算斜率的实现方法
按ID计算LogB随Block变化的斜率
下面是几种在R中实现按ID分组计算斜率的方法,最终都会输出每个ID对应的单独斜率列:
方法1:tidyverse风格(dplyr + broom)
适合习惯使用tidyverse工具链的用户,代码可读性强:
# 加载依赖包 library(dplyr) library(broom) # 分组计算斜率 slope_result <- df %>% group_by(ID) %>% summarise(slope = coef(lm(LogB ~ Block, data = cur_data()))[["Block"]]) # 查看结果 slope_result
说明:cur_data()用于指代当前分组的数据集,coef(lm(...))[["Block"]]会提取线性模型中Block对应的系数,也就是我们需要的斜率。
方法2:data.table(高效处理大数据)
如果你的数据集规模较大,data.table的运算效率更高:
# 加载包并转换数据格式 library(data.table) setDT(df) # 分组计算斜率 slope_result <- df[, .(slope = coef(lm(LogB ~ Block))[["Block"]]), by = ID]
方法3:基础R实现(无需额外安装包)
不想安装额外包的话,用基础R的by()函数也能实现:
# 分组计算斜率并整理结果 slope_list <- by(df, df$ID, function(x) coef(lm(LogB ~ Block, data = x))[2]) slope_result <- data.frame(ID = names(slope_list), slope = unlist(slope_list))
针对你提供的示例数据,两个ID的斜率结果一致,为0.427(因LogB随Block呈完美线性增长)。
内容的提问来源于stack exchange,提问作者PBAB
相关产品推荐
相关产品推荐

