gpt4 book ai didi

r - 按组计算的累积(扩展窗口)均值,对每个计算进行重复检查

转载 作者:行者123 更新时间:2023-12-04 11:20:57 26 4
gpt4 key购买 nike

我正在尝试计算扩展窗口的平均值,但是数据结构使得之前的答案至少缺少一点所需的内容(最接近的是:link)。

我的数据看起来像这样:

  Company TimePeriod IndividualID Date.Indiv.Acted  Value 
1 1 2015 A 2015-01-01 400
2 1 2015 B 2015-02-01 200
3 1 2015 A 2015-06-15 400
4 1 2015 C 2015-07-12 300
5 1 2016 A 2016-07-15 400
6 1 2016 B 2016-08-09 100
7 1 2016 C 2016-09-10 400
8 1 2016 A 2016-10-11 100
9 2 2004 A 2004-07-12 200
10 2 2004 B 2004-08-12 300

而且我需要根据 Company-TimePeriod 为每个 Date.Indiv.Acted 获取值的累积平均值。但是,我需要删除重复项,同时保留最新的一个。因此,对于前两个平均值,没有问题 - 它们将包括第 1 行,以及第 1 行和第 2 行。但是,第 1、2 和 3 行应该删除第 1 行,因为 IndividualID 是重复的。本质上,我有预测信息,并且想在每次均值计算中仅使用个人的最新预测。

所以我的最终数据看起来像(添加行以便于解释 - 不需要在数据中),

  Company TimePeriod IndividualID Date.Indiv.Acted  Value CumMean 
1 1 2015 A 2015-01-01 400 400
2 1 2015 B 2015-02-01 200 300 (row 1 and 2)
3 1 2015 A 2015-06-15 400 300 (row 2 and 3)
4 1 2015 C 2015-07-12 300 300 (2,3,4)
5 1 2016 A 2016-07-15 400 400 (5)
6 1 2016 B 2016-08-09 100 250 (5,6)
7 1 2016 C 2016-09-10 400 300 (5,6,7)
8 1 2016 A 2016-10-11 100 200 (6,7,8)
9 2 2004 A 2004-07-12 200 200 (9)
10 2 2004 B 2004-08-12 300 250 (9,10)

data.table 解决方案将是理想的,但我并不挑剔,只要它可以在相当大的数据(2000 万行左右)上运行并且不会持续到宇宙热寂为止。

非常感谢你们提供的任何帮助。

最佳答案

setDT(dt)
dt[, occ := 1:.N, by = .(Company, TimePeriod, IndividualID)]
dt[, n := cumsum(!duplicated(IndividualID)), by = .(Company, TimePeriod)]
dt[, Value1 := Value,]
dt[, x := c(0, diff(Value)), by = .(Company, TimePeriod, IndividualID)]
dt[occ>1, Value1 := x,]
dt[, Cummean := cumsum(Value1)/n, by = .(Company, TimePeriod)]
dt[, c("occ", "n", "Value1", "x") := NULL][]
# Company TimePeriod IndividualID Date.Indiv.Acted Value Cummean
# 1: 1 2015 A 2015-01-01 400 400
# 2: 1 2015 B 2015-02-01 200 300
# 3: 1 2015 A 2015-06-15 400 300
# 4: 1 2015 C 2015-07-12 300 300
# 5: 1 2016 A 2016-07-15 400 400
# 6: 1 2016 B 2016-08-09 100 250
# 7: 1 2016 C 2016-09-10 400 300
# 8: 1 2016 A 2016-10-11 100 200
# 9: 2 2004 A 2004-07-12 200 200
#10: 2 2004 B 2004-08-12 300 250

dt <- structure(list(Company = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2), TimePeriod = c(2015,
2015, 2015, 2015, 2016, 2016, 2016, 2016, 2004, 2004), IndividualID = c("A",
"B", "A", "C", "A", "B", "C", "A", "A", "B"), Date.Indiv.Acted = c("2015-01-01",
"2015-02-01", "2015-06-15", "2015-07-12", "2016-07-15", "2016-08-09",
"2016-09-10", "2016-10-11", "2004-07-12", "2004-08-12"), Value = c(400,
200, 400, 300, 400, 100, 400, 100, 200, 300)), row.names = c(NA,
-10L), class = "data.frame")

关于r - 按组计算的累积(扩展窗口)均值,对每个计算进行重复检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55262915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com