仅对数据中的特定行应用 frollapply table

Apply frollapply only on specific rows in data table

假设我有简单的 DT:

library(data.table)


DT <- data.table(x = 1:20)

我想在 DT 的特定行上应用 frollapply 函数。例如,此代码在每一行上应用函数:

DT[, frollapply(x, n = 10, FUN = function(y) sum(y, na.rm = TRUE))]

但是我想return只有11和13,也就是65和85号。

我知道我可以在应用 frollapply 之后进行子集化,但是我会在每一行上执行该函数。

这样的东西不起作用(它似乎是第一个子集而不是应用):

DT[c(11, 13), frollapply(x, n = 10, FUN = function(y) sum(y, na.rm = TRUE))]

您不能直接对 11-13 进行子集化,因为您需要以前的值来计算滚动总和,但不需要 13 之后的值,因此您可以先对 1:13 进行子集化,然后只计算滚动和那些的总和。然后再次对 11:13.

进行子集化
DT[c(1:13), frollapply(x, n = 10, FUN = function(y) sum(y, na.rm = TRUE))][c(11, 13)]

# [1] 65 85

rolling函数(apply/sum/mean)的要点恰恰是将函数应用于整个向量。如果您只需要 2 个值,最简单的方法就是只要求这些值:

DT[, sapply(c(11, 13), function(i) sum(x[(i-9):i]))]
#[1] 65 85