动态大小为 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' 没有帮助任何一个。
我想使用为每一行定义的滚动大小 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' 没有帮助任何一个。