r - 在 R data.table 中按组修剪平均值
问题描述
我有一个 data.table,我想在其上按月查找列的加权平均值performance
。
dat <- structure(list(year = c(2014, 2015, 2016, 2017, 2018, 2019, 2020,
2021, 2014, 2015, 2016, 2017, 2018, 2019, 2020),
month = c(2,
2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10),
performance = c(0.826973794097158,
0.61975709469356, 0.924350659523548, -0.183133219063708, -0.529913189565746,
-0.148531188902535, -0.0773058814083695, 1.42862504650241, 0.465498268732376,
0.148719963224136, 0.205614191281359, 0.560651497949418, -0.484408605607923,
0.875353374774486, 0.351469397380814)),
row.names = c(NA, -15L), class = c("data.table", "data.frame"))
此 data.table 如下所示 -
year month performance
1: 2014 2 0.82697379
2: 2015 2 0.61975709
3: 2016 2 0.92435066
4: 2017 2 -0.18313322
5: 2018 2 -0.52991319
6: 2019 2 -0.14853119
7: 2020 2 -0.07730588
8: 2021 2 1.42862505
9: 2014 10 0.46549827
10: 2015 10 0.14871996
11: 2016 10 0.20561419
12: 2017 10 0.56065150
13: 2018 10 -0.48440861
14: 2019 10 0.87535337
15: 2020 10 0.35146940
要按月查找加权平均值,我使用了以下代码 -
setDT(dat)[, lapply(.SD, function(x) weighted.mean(x, na.rm = TRUE)), by = .(month), .SDcols = c("performance")]
我得到的结果是-
month performance
1: 2 0.3576029
2: 10 0.3032712
但是,月份的加权平均表现10
应该大于月份2
,因为它具有更多的正值。
似乎只有2
2021 年的月份对其表现造成了沉重的压力,导致其表现优于当月的表现10
。实际上,上面的代码只找到了mean
而不是weighted.mean
. 如果我使用mean
而不是weighted.mean
.
setDT(dat)[, lapply(.SD, function(x) mean(x, na.rm = TRUE)), by = .(month), .SDcols = c("performance")]
使用简单均值后的结果如下,与 weighted.mean 的结果相同。
month performance
1: 2 0.3576029
2: 10 0.3032712
期望的结果应该对每一年的表现给予同等的重视,以便某一特定年份的卓越表现不会错误地表明该产品在每年该月的销售情况非常好。
有人能指出我的加权平均计算有什么问题吗?
解决方案
作为一个新的stackoverflow用户,我无法在帖子中添加commnets,所以我将在这里添加我的疑问。
一般来说,你提供的代码是一个简单的平均值,我不清楚你想要什么,因为通常当你想要一个加权平均值时,你会使用第二个变量作为权重。
在您的情况下,一个简单的平均值返回相同的输出:
library(dplyr)
dat %>%
group_by(month) %>%
summarise(performance = mean(performance))
推荐阅读
- javascript - React Native - 用于 TextInput 的未定义函数 onPress
- python - 如何计算具有循环值的列中的循环数?
- c# - 总是从 Microsoft.Build 库中获得 BuildResultCode.Failure
- microsoft-graph-api - 上传大小未知的文件 OneDrive
- css - 如果浏览器比 X 窄,切换到移动视图?
- node.js - IBM IoT 输出节点到 websockets 端点
- html - 背景图像在手机上显示为放大
- python-3.x - Python 和 SQLite3 SELECT 语句
- mysql - Pentaho PDI ETL:错误连接到 mysql 版本 8
- unit-testing - 如何在不使用依赖注入的情况下模拟另一个包中的函数?