按时间段滚动平均值而不是 R 中的观察值

run*_*rds 5 time r summary time-series moving-average

我有一个日期随机发生的数据集。例如:

10/21/15、11/21/15、11/22/15、11/28/15、11/30/15、12/12/15...等

我希望按时间段而不是观察级别创建滚动平均值。例如,如果我想计算过去 7 天的移动平均线。我不想查看最后 7 行,而是查看最后 7

举一个小例子:

 dates = c('2015-08-07', '2015-08-08','2015-08-09','2015-09-09','2015-10-10')
 value = c(5,10,5,3,2)
 df=data.frame(dates, value)
 df$desired = c(NA,5,7.5, NA,NA)
Run Code Online (Sandbox Code Playgroud)

显然,我希望对更大的数据集执行此操作,但我希望您明白这一点。例如,如果我使用 7 天,这就是我期望的结果。

请注意,我没有将当前观测值纳入滚动平均值,仅将前一个观测值纳入其中。我想要按时间段滚动平均值,而不是观察行数。

我尝试查看 rollmean 和 dplyr 但我无法弄清楚。我真的不在乎它是如何发生的。

谢谢!

roa*_*dom 1

尝试这个:

rollavgbyperiod <- function(i,window){
  startdate <- dates[i]-window
  enddate <- dates[i]-1
  interval <- seq(startdate,enddate,1)

  tmp <- value[dates %in% interval]
  return(mean(tmp))
}

dates <- as.Date(dates)
window <- 7
res <- sapply(1:length(dates),function(m) rollavgbyperiod(m,window))
res[is.nan(res)] <- NA

> data.frame(dates,value,res)
       dates value res
1 2015-08-07     5 NA
2 2015-08-08    10 5.0
3 2015-08-09     5 7.5
4 2015-09-09     3 NA
5 2015-10-10     2 NA
Run Code Online (Sandbox Code Playgroud)