我有一个常规的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")
答案 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"
是rollmean
和rollapply
的默认值,因此可以省略。
答案 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))