具有不同移动 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))))
我有一个很长的变量时间序列。我想执行 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))))