动态大小为 window 的滚动总和并跳过前几行

Rolling sum with dynamic size of window and skipping first few rows

我想使用为每一行定义的滚动大小 window 来计算我的数据的滚动总和和滚动平均值。

例如,假设我有不同城市的每日气温和每日降水量。我想计算每个城市过去的平均温度和过去的累积降雨量,但每一行的分析变化 window。我还需要计算过去的气候变量,但跳过前几次观察。

下面的代码有助于举例说明我的需求。

set.seed(122)
df <- data.frame(rain = rep(5,10),temp=1:10, skip = sample(0:2,10,T),
                 windw_sz = sample(1:2,10,T),city =c(rep("a",5),rep("b",5)),ord=rep(c(1:5),2)) 
df
   rain temp skip windw_sz city ord
1     5    1    0        2    a   1
2     5    2    1        1    a   2
3     5    3    2        2    a   3
4     5    4    2        1    a   4
5     5    5    2        2    a   5
6     5    6    0        1    b   1
7     5    7    2        2    b   2
8     5    8    1        2    b   3
9     5    9    2        1    b   4
10    5   10    2        2    b   5

在第一行,skip== 0,而window_size ==2,所以我应该考虑今天和昨天的变量。在第二行中,skip == 1 和 window size ==1,所以我只需要考虑昨天的变量。第三行skip== 2和window size == 2,所以我应该跳过今天和昨天的变量,只考虑前两天。

感谢任何解决方案,但我特别喜欢 data.table。

非常感谢任何建议

我认为 data.tables frollsum() 应该在这里工作:

dd <- data.table(value = 1:10,
                 offset = c(0, 1, 0, 0, 2, 0, 0, 0, 0, 1),
                 windowsize = c(1, 1, 1, 3, 3, 2, 0, 1, 0, 2))

dd[, frollsum(value, windowsize + offset, adaptive=TRUE) - frollsum(value, offset, adaptive=TRUE)]

如果 window 大小扩展了值,我无法弄清楚如何使滚动总和得到 'padded' 和 0...设置 'na.rm=TRUE' 没有帮助任何一个。