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
这就是 rollapplyr
的 partial=TRUE
参数所做的。这里我们用 sum
以及 sd
和 IQR
来表示。 (请注意,一个值的 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
我想创建一个 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
这就是 rollapplyr
的 partial=TRUE
参数所做的。这里我们用 sum
以及 sd
和 IQR
来表示。 (请注意,一个值的 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