每组最后一行所需的 rollsum 结果

Result of rollsum needed in final row of each set

我正在使用 zoo::rollsum() 来获得一个观察值与它之前的两个观察值的总和。但是,目前,结果显示在每组三个的 top/earliest 行中,但我希望它显示在 final/latest 行中。

这是示例代码:

library(zoo)
library(data.table)
random_dt <- data.table(group = LETTERS, total = sample(1:10, 26, replace = T))
random_dt <- random_dt[, .(group, total, 
                       rolling_total = as.numeric(rollsum(total, 3, align = "right")))]

我正在使用 align = "right",正如您所看到的,这是我所理解的影响了这一点。但是,当我使用 align = "left"align = "center" 时,没有任何变化。

我也收到一条警告,可能是相关的:

Warning message: In as.data.table.list(jval) : Item 3 is of size 24 but maximum size is 26 (recycled leaving a remainder of 2 items)

我理解消息 - 通过这样做,前两个观察结果没有足够的先前观察结果来创建三个的滚动总和。理想情况下,这些值将保留为 NA 或其他。但是,这个问题可能会导致价值被推高吗? rolling_total 列中最后两个值的依据对我来说并不明显。

问题是 na.pad 默认为 FALSE,并且未指定 fill 参数。因此,它会在开头丢弃 NAs,这会导致长度不平衡。将其更改为 na.pad = TRUE 并且应该工作

random_dt[, .(group, total, rolling_total = as.numeric(rollsum(total, 3, 
     align = "right", na.pad = TRUE)))]

此外,OP 提到了 na.pad 的弃用警告,因此 fill = NA 更合适