首页 > 解决方案 > R中没有前导NA的滚动平均输出?

问题描述

我正在尝试使用Rrollmean()中的包zoo中的函数计算我的数据列表中的正确滚动平均值。我希望我的输出在开始时排除 NA,并且只列出计算出的滚动平均值。

我的原始时间序列数据如下所示:

> ts_qtr[1:2] 
$`A`
     Qtr1 Qtr2 Qtr3 Qtr4
2017    0    0    0    0
2018    0    0    0    0
2019    0    0    1    0
2020    0    0          

$`B`
     Qtr1 Qtr2 Qtr3 Qtr4
2017    0    1    0    0
2018    0    0    0    0
2019    0    0    0    0
2020    0    0 

当我运行这行代码时: cma_qtr <- lapply(ts_qtr, function(x) rollmean(x, k = 4, fill = NA, align = "right")) ,我得到这种带有领先 NA 的输出:

> cma_qtr[1:2]
$`A`
     Qtr1 Qtr2 Qtr3 Qtr4
2017   NA   NA   NA 0.00
2018 0.00 0.00 0.00 0.00
2019 0.00 0.00 0.25 0.25
2020 0.25 0.25          

$`B`
     Qtr1 Qtr2 Qtr3 Qtr4
2017   NA   NA   NA 0.25
2018 0.25 0.00 0.00 0.00
2019 0.00 0.00 0.00 0.00
2020 0.00 0.00

我希望我的输出看起来像这样(没有 NA):

$`A&R SANDWICHES INC.BARIATRIC`
     Qtr1 Qtr2 Qtr3 Qtr4
2017                0.00
2018 0.00 0.00 0.00 0.00
2019 0.00 0.00 0.25 0.25
2020 0.25 0.25          

$`AAA Carolinas.BARIATRIC`
     Qtr1 Qtr2 Qtr3 Qtr4
2017                0.25
2018 0.25 0.00 0.00 0.00
2019 0.00 0.00 0.00 0.00
2020 0.00 0.00 

如果我运行我的代码行并声明填充 = FALSE,则前导值变为 0 而不是 NA(也不完全是我想要的)

cma_qtr2 <- lapply(ts_qtr, function(x) rollmean(x, k = 4, fill = FALSE, align = "right"))

> cma_qtr2[1:2]
$`A`
     Qtr1 Qtr2 Qtr3 Qtr4
2017 0.00 0.00 0.00 0.00
2018 0.00 0.00 0.00 0.00
2019 0.00 0.00 0.25 0.25
2020 0.25 0.25          

$`B`
     Qtr1 Qtr2 Qtr3 Qtr4
2017 0.00 0.00 0.00 0.25
2018 0.25 0.00 0.00 0.00
2019 0.00 0.00 0.00 0.00
2020 0.00 0.00 

如果我没有列出 fill 和 aline,我会收到一条错误消息:

> cma_qtr3 <- lapply(ts_qtr, function(x) rollmean(x, k = 4))
 Error in ts(x) : 'ts' object must have one or more observations

我很困惑下一步该怎么做。最终,我想通过predict()forecast()(来自包forecast)函数运行滚动平均输出,这些函数由于 NA 而通过警告消息。

标签: rtime-series

解决方案


您可能希望考虑在数据帧上使用na.rm = True来维护 rwos,但将它们排除在计算之外。您也可以尝试na.omit()!is.na()作为滚动平均值的条件。

你可以在这里看到它是如何工作的,他们计算不包括 NA 值的列的平均值。https://www.programmingr.com/tutorial/na-rm/


推荐阅读