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"
是 rollmean
和 rollapply
的默认值,因此可以省略。
如果你不想要 NA,你可以使用 fill 参数来扩展具有简单常量值的数据范围:
使用关键字 "extend" rollmean 将扩展您的输入向量:
rollmean(x, k, align="center", fill = "extend")
或者为 left|at|right 定义一个三分量常量:
rollmean(x, k, align="center", fill = c(42, 69, 666))
我有一个定期 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"
是 rollmean
和 rollapply
的默认值,因此可以省略。
如果你不想要 NA,你可以使用 fill 参数来扩展具有简单常量值的数据范围:
使用关键字 "extend" rollmean 将扩展您的输入向量:
rollmean(x, k, align="center", fill = "extend")
或者为 left|at|right 定义一个三分量常量:
rollmean(x, k, align="center", fill = c(42, 69, 666))