仅对数据中的特定行应用 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
假设我有简单的 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