Cumsum 但具有最大数量的数据点

Cumsum but with maximum number of datapoints

我想创建一个 cumsum()TTR::runSum() 的混合体,其中 cumSum() 运行到预先指定数量的数据点,此时它更像是一个runSum()

例如:

library(TTR)
data <- rep(1:3,2)
cumsum <- cumsum(data)
runSum <- runSum(data, n = 3)
DesiredResult <- ifelse(is.na(runSum),cumsum,runSum)

有没有一种不需要 NAs finangly 就可以获得 DesiredResult 的方法?

这里有三种选择。

n <- 3

rowSums(embed(c(rep(0, n - 1), data), n)) # base R
# [1] 1 3 6 6 6 6

library(TTR)
runSum(c(rep(0, n - 1), data), n = n)
# [1] NA NA  1  3  6  6  6  6 # na.omit fixes the beginning

library(zoo)
rollsum(c(rep(0, n - 1), data), k = 3, align = "right")
# [1] 1 3 6 6 6 6

这就是 rollapplyrpartial=TRUE 参数所做的。这里我们用 sum 以及 sdIQR 来表示。 (请注意,一个值的 sd 是 NA,我们选择 IQR,因为它是一种可以为标量计算的传播度量,尽管在这种情况下它始终为 0。)

library(zoo)

rollapplyr(data, 3, sum, partial = TRUE)
## [1] 1 3 6 6 6 6

rollapplyr(data, 3, sd, partial = TRUE)
## [1] NA 0.7071068 1.0000000 1.0000000 1.0000000 1.0000000

rollapplyr(data, 3, IQR, partial = TRUE)
## [1] 0.0 0.5 1.0 1.0 1.0 1.0