每组最后一行所需的 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
参数。因此,它会在开头丢弃 NA
s,这会导致长度不平衡。将其更改为 na.pad = TRUE
并且应该工作
random_dt[, .(group, total, rolling_total = as.numeric(rollsum(total, 3,
align = "right", na.pad = TRUE)))]
此外,OP 提到了 na.pad
的弃用警告,因此 fill = NA
更合适
我正在使用 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
参数。因此,它会在开头丢弃 NA
s,这会导致长度不平衡。将其更改为 na.pad = TRUE
并且应该工作
random_dt[, .(group, total, rolling_total = as.numeric(rollsum(total, 3,
align = "right", na.pad = TRUE)))]
此外,OP 提到了 na.pad
的弃用警告,因此 fill = NA
更合适