R新手求助:按日期计算价格加权平均值的实现问题
按日期计算价格加权平均值的解决方法
你的问题出在aggregate调用weighted.mean时没传入权重参数——weighted.mean需要两个核心参数:待加权的数值向量,以及对应的权重向量,你只传了价格,函数默认权重全为1,自然算出普通平均值。下面给两种可行的解决方法:
方法一:Base R(无需额外包)
通过aggregate同时传入价格和数量列,再用自定义函数计算加权平均:
# 计算加权平均并整理结果 price_weighted <- aggregate(cbind(price, quantity) ~ date, data = df, FUN = function(x) weighted.mean(x[,1], x[,2])) # 重命名结果列并移除多余列 colnames(price_weighted)[2] <- "price_weighted" price_weighted$quantity <- NULL
方法二:tidyverse(更直观易读)
用dplyr包的分组聚合语法,新手更容易理解和扩展:
# 首次使用需安装dplyr # install.packages("dplyr") library(dplyr) price_weighted_df <- df %>% group_by(date) %>% # 按日期分组 summarize(price_weighted = weighted.mean(price, quantity)) %>% # 计算每组加权平均 ungroup() # 取消分组状态(避免后续操作受分组影响)
两种方法都能得到你预期的结果:
| date | price_weighted |
|---|---|
| 01/09/21 | 2.00 |
| 01/16/21 | 2.00 |
| 01/23/21 | 3.00 |
| 01/30/21 | 2.95 |
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

