具有不同移动 window 大小的后向移动平均线,以保持输出序列大小与 R 中的原始时间序列相同

Backward moving average with varying moving window size to keep the output series size same as the original time series in R

我有一个很长的变量时间序列。我想执行 window 大小为 20 的反向移动平均线。如果我保持此 window 大小,则输出序列将缩短长度 20(我的意思是前 20 个值将是 NA)但是什么我想要的是输出系列的长度应与具有非 NA 的原始系列相同。为此,我想在开始时改变 window 大小,以便获得所需的输出。例如,对于原始时间序列中的前 20 个值,移动 window 大小可以分别为 1、2、3、....、20。然后我想在 window 之后保持 20 的大小。如何做到这一点?

这是示例数据和所需的输出 window 大小 3:

Days    Original_Values    Desired_Output
 1           2                  2
 2           4                  2
 3           1                  3
 4           3                  7/3
 5           5                  8/3
 6           6                  9/3
 7           4                  14/3
 8           9                  15/3

使用最后注释中可重复显示的输入,使用 rollapplyr 指定偏移量 -1、-2、-3 并使用参数 partial=TRUE 让它使用少于指定的如果只有更少的可用偏移量。由于没有先验元素,因此无法计算第一个元素,因此为此指定使用 fill 参数填充第一个元素。

library(zoo)

DF2 <- transform(DF, roll = 
  rollapplyr(Original, list(-(1:3)), mean, partial = TRUE, fill = Original[1]))

with(DF2, identical(Desired, roll))  # check that result matches Desired
## [1] TRUE

备注

Lines <- "
 Days        Original           Desired
 1           2                  2
 2           4                  2
 3           1                  3
 4           3                  7/3
 5           5                  8/3
 6           6                  9/3
 7           4                  14/3
 8           9                  15/3"
DF <- read.table(text = Lines, header = TRUE)
DF <- transform(DF, Desired = sapply(Desired, function(x) eval(parse(text = x))))