rollmean时间序列的长度

时间:2015-02-12 15:53:32

标签: r time-series mean moving-average

我有一个常规的15分钟数据间隔的时间序列,我想每2小时对数据进行滚动平均,因此rollmean间隔的宽度将为8.唯一的问题是长度为我输入的原始时间序列是35034,但是我输出的数据长度是35027.有没有一种方法,输出的长度与输入相同,并且最后在其中有数据好。我不想在最后用NA填充它

interval <- 2 #2 hours
data <- data.frame(t=streamflowDateTime,flow=streamflow)
data2hr <- data
rollingWidth <- (interval*60)/15
library(zoo)
smoothedFlow <- rollmean(data2hr$flow,rollingWidth,align="center")

2 个答案:

答案 0 :(得分:0)

我不清楚你想如何填充,但这里有一些方法:

1)将参数fill = NA添加到rollmean以将NA添加到结尾。

2)如果你想在末尾使用部分方法,那么在x是你的数据的地方使用它,width是每次取平均数的点数:

rollapply(x, width, mean, partial = TRUE)

(靠近两端的点将是小于宽度点的平均值,因为当然,在末端附近没有那么多。)

3)假设宽度为奇数,您可以在每端填充(width-1)/ 2值(可能NA取决于您想要的值)的输入系列。

4)这会使原始值保持在接近结尾处:

out <- rollmean(x, width, fill = NA)
isNA <- is.na(out)
out[isNA] <- x[isNA]

注意: align = "center"rollmeanrollapply的默认值,因此可以省略。

答案 1 :(得分:0)

如果您不想要NA,可以使用fill参数通过简单的常量值扩展数据范围:

使用关键字&#34; extend&#34; rollmean将扩展您的输入向量:

rollmean(x, k, align="center", fill = "extend")

或为left | at | right定义一个三分量常量:

rollmean(x, k, align="center", fill = c(42, 69, 666))