lov*_*low 4 r data.table rolling-computation
我正在寻找一种在大型数据库上实现滚动总和的快速方法。我想要的是一个支持左(和右)对齐和最小观察论证的快速函数。
本质上,即使样本大小小于指定的宽度,我也想计算滚动总和。在下面的示例中,只要有下 5 个值可用,我就想要下 5 个值的总和,并且如果前导值的大小小于 5,则对剩余的所有值求和。
例子:
x <- seq(1:10)
期望的输出:
15 20 25 30 35 40 34 27 19 10
我知道这rollapply(x,5, sum, align = "left", partial=1)会产生所需的输出,但我正在寻找更快的解决方案。
frollsum来自包 data.table 的速度很快,但似乎没有对最小观察的争论。roll_sum从包装卷也很快,并接受最小观察值,但不支持左对齐。
提前致谢。
截至data.table_1.12.8,frollsum不支持align="left"with adaptive=TRUE,但是您可以使用以下方法对其进行调整rev:
library(data.table) #data.table_1.12.8
lrfrollsum <- function(x, k, align) {
nk <- c(seq.int(k), rep(k, length(x) - k))
switch(align,
left={
rev(frollsum(rev(x), nk, align="right", adaptive=TRUE))
},
right={
frollsum(x, nk, align="right", adaptive=TRUE)
})
}
x <- 1:10
lrfrollsum(x, 5, align="left")
# [1] 15 20 25 30 35 40 34 27 19 10
lrfrollsum(x, 5, align="right")
# [1] 1 3 6 10 15 20 25 30 35 40
Run Code Online (Sandbox Code Playgroud)
希望这足够快。