You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R data.table按月份分组计算weighted.mean结果与普通均值一致问题

R data.table按月份分组计算年度等权均值问题解答

错误原因

你原来的代码没有给weighted.mean()传入自定义权重参数w,函数默认所有样本权重相等,因此计算结果和普通mean()完全一致,没有实现按年份等权的需求。

实现逻辑

你要求的「按月份分组时每年performance权重相等」,核心规则是:

  • 同一月份下,每一个年份的总权重为1
  • 若某一年该月份有n条数据,每条数据平分当年的权重,即单条权重为1/n
  • 若某一年该月份仅有1条数据,单条权重直接为1

正确代码

场景1:每个(year, month)组合仅对应1条数据(你的示例属于该场景)

library(data.table)
setDT(dat)
# 按月份分组,每组内每条数据对应一个独立年份,权重均为1/分组样本数
res <- dat[, .(weighted_perf = weighted.mean(performance, w = rep(1/.N, .N), na.rm = TRUE)), by = month]

运行结果:

month weighted_perf
1:     2     0.3576029
2:    10     0.3032712

场景2:存在同一个(year, month)组合对应多条数据的通用场景

# 先计算每条数据的权重:同一年月下的n条数据平分权重1
res <- dat[, wt := 1/.N, by = .(year, month)][, 
        .(weighted_perf = weighted.mean(performance, w = wt, na.rm = TRUE)), 
        by = month]

结果说明

你感知的「10月正值更多应该均值更高」属于误判,实际计算你的示例数据:

  • 2月共8个年份的数值总和为2.8608,除以8得到均值0.3576
  • 10月共7个年份的数值总和为2.1229,除以7得到均值0.3033
    因此结果符合数值实际分布,没有逻辑错误。

内容的提问来源于stack exchange,提问作者Saurabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 03:36:06