如何在R语言中按ID分组计算DataFrame的均值?
嘿,我来帮你搞定这个分组计算均值的问题!
首先,先把你的示例数据框构造出来,方便测试:
df <- data.frame( id = c(1,2,3,1,1,3,2), value = c(100,200,100,100,100,200,300) )
按照你写的循环思路完成实现
你已经拿到了唯一的ID列表,接下来只需要在循环里筛选出每个ID对应的value值,计算均值后存起来就行:
ids <- unique(df$id) # 创建一个空向量来存结果,用ID作为名字方便查看 mean_results <- numeric(length(ids)) names(mean_results) <- ids for(i in ids){ # 筛选当前ID对应的所有value current_vals <- df$value[df$id == i] # 计算均值并赋值到结果向量中 mean_results[as.character(i)] <- mean(current_vals) } # 输出结果 mean_results
运行这段代码后,你会得到预期的结果:1 2 3 100 250 150。
更高效的R风格写法(推荐)
其实在R里,手动写循环不是最简洁的方式,给你推荐两种常用的高效方法:
方法1:使用基础R的aggregate函数
一行代码就能搞定分组均值:
aggregate(value ~ id, data = df, FUN = mean)
输出会是一个数据框,清晰展示每个ID对应的均值:
id value 1 1 100 2 2 250 3 3 150
方法2:使用dplyr包(tidyverse风格)
如果你习惯更直观的管道写法,可以用dplyr:
# 首次使用需要先安装:install.packages("dplyr") library(dplyr) df %>% group_by(id) %>% summarise(mean_value = mean(value))
这个输出同样是结构清晰的数据框,后续做数据处理也更方便。
内容的提问来源于stack exchange,提问作者Kev Schl
相关产品推荐
相关产品推荐

