R语言:如何按date-v1分组计算每组v2的均值?
按date-v1分组计算v2均值的解决方法
没问题!你已经掌握了用aggregate()按单个变量分组的思路,要实现同时按date和v1两个变量分组只需要小小调整参数就行,下面给你两种最常用的实现方式:
方法1:使用aggregate()的公式形式(最贴合你的输出需求)
这种写法直接用公式指定分组变量和待计算的变量,输出的列名完全匹配你想要的格式:
# 核心代码 aggregate(v2 ~ date + v1, data = df, FUN = mean)
用你的样本数据测试:
先构造示例数据框:
df <- data.frame( date = c(1991, 1991, 1991, 1991, 1992), v1 = c(1, 1, 2, 2, 1), v2 = c(2, 3, 1, 3, 1) )
运行上面的代码后,输出结果就是:
date v1 v2 1 1991 1 2.5 2 1992 1 1.0 3 1991 2 2.0
方法2:使用aggregate()的列表分组形式
如果你习惯用by参数的写法,只需要在列表里传入两个分组变量即可,记得给变量命名让结果更清晰:
aggregate(df$v2, by = list(date = df$date, v1 = df$v1), FUN = mean)
这个写法的输出列名会是date、v1和x(x对应v2的均值),如果想把x改成v2,可以手动重命名:
result <- aggregate(df$v2, by = list(date = df$date, v1 = df$v1), FUN = mean) colnames(result)[3] <- "v2"
额外推荐:tidyverse风格的写法(更直观)
如果你使用dplyr包,分组汇总的逻辑会更清晰易懂:
library(dplyr) df %>% group_by(date, v1) %>% # 按date和v1分组 summarise(v2 = mean(v2), .groups = "drop") # 计算v2的均值并取消分组
运行后同样会得到你期望的输出格式。
内容的提问来源于stack exchange,提问作者tehdima
相关产品推荐
相关产品推荐

