rollmean 时间序列长度

rollmean length of timeseries

我有一个定期 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")

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

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 的默认值,因此可以省略。

如果你不想要 NA,你可以使用 fill 参数来扩展具有简单常量值的数据范围:

使用关键字 "extend" rollmean 将扩展您的输入向量:

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

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

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