R 中的各种包中有各种“滚动窗口”功能。
以下内容基于{slider}。如果语法不是您的风格,请查看{zoo} 及其rollmean() 函数。
可重现的数据集/样本
如果您提供可重现的数据集,您会在这里找到很多朋友。
我选择了您图片中显示的部分数据。考虑将来这样做。
我将您的月-年转换为年-月(数字)的字符。在 R 中,我建议您为此使用正确的 Date 或 datetime 对象。这可以帮助进行其他转换。 ((但那是另一个讨论))
library(dplyr)
df <- tibble(
Data = c("2021-03", "2021-04","2021-05","2021-06","2021-07","2021-08")
,ANOM = c(-0.79,-0.72,-0.46,-0.28,-0.38,-0.45)
)
使用 {slider}
要了解什么滑块打印出以下内容:
library(slider)
> df %>% slide(~.x, .before = 2)
[[1]]
# A tibble: 1 x 2
Data ANOM
<chr> <dbl>
1 2021-03 -0.79
1 2021-03 -0.79
[[2]]
# A tibble: 2 x 2
Data ANOM
<chr> <dbl>
1 2021-03 -0.79
2 2021-04 -0.72
[[3]]
# A tibble: 3 x 2
Data ANOM
<chr> <dbl>
1 2021-03 -0.79
2 2021-04 -0.72
3 2021-05 -0.46
这会构建一个大小为 3 的“滑动窗口”,即实际值和前一个 2。
请注意,您可能希望以不同方式处理部分窗口。检查它的文档。
上一行、当前行和下一行的滚动平均值
现在让我们将它用于沿着数据框的ANOM 变量的所需滑动窗口。我们知道输出是双打,我们使用slide_dbl() 函数(否则你会得到一个列表列)。
最初的问题是关于前一行、当前行和下一行的滚动平均值。因此,我们根据步长适当地设置了.before 和.after。
df %>%
mutate(TMA = slide_dbl(ANOM, mean, .before = 1, .after = 1))
# A tibble: 6 x 3
Data ANOM TMA
<chr> <dbl> <dbl>
1 2021-03 -0.79 -0.755
2 2021-04 -0.72 -0.657
3 2021-05 -0.46 -0.487
4 2021-06 -0.28 -0.373
5 2021-07 -0.38 -0.37
6 2021-08 -0.45 -0.415