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

R Cumsum,但具有最大数量的数据点,r,moving-average,R,Moving Average,我希望创建一个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) 库(TTR) 数据这里有三种选择

我希望创建一个
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)
库(TTR)

数据这里有三种选择

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

n这就是
rollappyr
partial=TRUE
参数所做的。这里我们用
sum
以及
sd
IQR
来说明这一点。(请注意,一个值的
sd
为NA,我们选择IQR,因为它是可以为标量计算的扩展度量,尽管在这种情况下它始终为0。)


runSum(c(0,0,数据))
?你可以用zerosThanks@Julius填充开头,这太棒了。我希望能够使用TTRs的其他功能,如
runSD
,但似乎0填充技术在那里不起作用?是的,它不起作用。对于
runSD
(以及最有可能的任何其他函数)的情况,存在这样的
x
c(x,data)
将给出期望的结果,但是
x
的定义将涉及
数据本身,因此可能这是一种过度使用,一些更简单的方法更好。
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