r - 具有不同移动窗口大小的向后移动平均值,以保持输出序列大小与 R 中的原始时间序列相同
问题描述
我有一个变量的长时间序列。我想执行一个窗口大小为 20 的向后移动平均。如果我保持这个窗口大小,那么输出序列将缩短长度 20(我的意思是前 20 个值将是 NA)但我想要的是输出序列应与非 NA 的原始系列长度相同。为此,我想在开始时改变窗口大小,以便获得所需的输出。例如,对于原始时间序列中的前 20 个值,移动窗口大小可以分别为 1、2、3、..、20。然后我想在之后保持 20 的窗口大小。如何做到这一点?
这是窗口大小为 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))))
推荐阅读
- ubuntu - 如何让 Ubuntu 18.04 自动登录 i3
- javascript - 为什么从函数引用调用静态类方法时未定义但直接调用时未定义?
- rust - 如何在 Rust 的内联汇编宏中使用常量?
- python - 根据条件设置熊猫数据框的值
- javascript - 如何为输入范围设置动画以动态更改其值?
- python - Django - 是否使用某些参数过滤了查询集
- python - 在 Python 的 unittest 中向 TestCase 添加元数据
- html - Bootstrap:重叠列
- c# - 与生成的 nunit3 控制台一起运行的带有测试的 DLL 在哪里?
- javascript - Javascript 无法从数组中获取 document.getElementById('cs')