如何使用dplyr计算双分组变量的加权均值
解决方法:用dplyr计算按cyl分组的mpg加权均值
嘿,这事儿其实用dplyr就能轻松搞定,甚至可以一步到位,不用先单独生成Count数据框再绕弯子~
方法一:一步完成(更高效推荐)
直接在原始数据集上操作,先按cyl和mpg分组统计次数,再保留cyl分组计算加权均值:
library(dplyr) mtcars %>% group_by(cyl, mpg) %>% summarize(Count = n(), .groups = "drop_last") %>% # 只移除最内层的mpg分组,保留cyl分组 summarize(weighted_mpg = weighted.mean(mpg, w = Count))
这里的.groups = "drop_last"参数很关键,它会在第一次summarize后,只去掉最内层的mpg分组,保留cyl作为后续计算的分组依据,这样weighted.mean就能直接按每个cyl类别计算加权均值了。
方法二:基于你已生成的Count数据框
如果你已经有了之前生成的含cyl、mpg、Count的数据框(比如命名为count_df),可以直接按cyl分组计算:
# 先生成你提到的Count数据框 count_df <- mtcars %>% group_by(cyl, mpg) %>% summarize(Count = n(), .groups = "drop") # 计算加权均值 count_df %>% group_by(cyl) %>% summarize(weighted_mpg = weighted.mean(mpg, w = Count))
结果示例
运行上述代码后,你会得到类似这样的输出:
# A tibble: 3 × 2 cyl weighted_mpg <dbl> <dbl> 1 4 26.7 2 6 19.7 3 8 15.1
内容的提问来源于stack exchange,提问作者ds_guy
相关产品推荐
相关产品推荐

