【问题标题】:rollmean length of timeseries时间序列的rollmean长度
【发布时间】:2015-02-12 15:53:32
【问题描述】:

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

【问题讨论】:

  • 使用runmean from caTools 更快,并且有一个endrule 参数可以对端点做任何你想做的事情。

标签: r time-series mean moving-average


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      相关资源
      最近更新 更多