r中data.table中的部分滚动总和

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从包装卷也很快,并接受最小观察值,但不支持左对齐。

提前致谢。

chi*_*n12 6

截至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)

希望这足够快。