我有一个在 R 里的 data.table,想要对其进行分组并实现滚动求和。但问题是每个分组长度不一致,当 rollapply 函数处理较短的分组时会出现错误。是否有方法可以解决这个问题,而不用使用 for 循环呢?
以下是一个简单的示例来说明这个问题。
但是这会给我一个错误。
理想情况下,输出应该是:
以下是一个简单的示例来说明这个问题。
DT <- data.table(id = c(rep("A", 6), rep("B", 2), rep("C", 8)),
val = c(1:6, 1:2, 1:8))
> DT
id val
1: A 1
2: A 2
3: A 3
4: A 4
5: A 5
6: A 6
7: B 1
8: B 2
9: B 1
10: B 2
11: B 3
12: B 4
13: B 5
14: B 6
15: C 7
16: C 8
使用rollapplyr()
实现对4个数字的滚动求和。
DT[, cum.sum := rollapplyr(val, width = 4, FUN = sum, fill = NA), by = id]
但是这会给我一个错误。
Error in seq.default(start.at, NROW(data), by = by) : wrong sign in 'by' argument
输出结果为
> DT
id val cum.sum
1: A 1 NA
2: A 2 NA
3: A 3 NA
4: A 4 10
5: A 5 14
6: A 6 18
7: B 1 NA
8: B 2 NA
9: C 1 NA
10: C 2 NA
11: C 3 NA
12: C 4 NA
13: C 5 NA
14: C 6 NA
15: C 7 NA
16: C 8 NA
理想情况下,输出应该是:
> DT
id val cum.sum
1: A 1 NA
2: A 2 NA
3: A 3 NA
4: A 4 10
5: A 5 14
6: A 6 18
7: B 1 NA
8: B 2 NA
9: C 1 NA
10: C 2 NA
11: C 3 NA
12: C 4 10
13: C 5 14
14: C 6 18
15: C 7 22
16: C 8 26
DT$id = as.factor(DT$id)
- cgage1