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

问题描述 投票:1回答:2

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

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

我希望按时间段而不是观察水平来创建滚动平均值。例如,如果我想做最近7天的移动平均线。我不想查看最后7行,而希望查看最近7个[[days

举个小例子:

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)

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

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

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

谢谢!

r time time-series summary moving-average
2个回答
0
投票
尝试一下:

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


0
投票
我建议在这种情况下使用runner软件包。这里需要的是mean_runk = 7窗口,滞后1个周期。简单的一线:

library(runner) dates = c('2015-08-07', '2015-08-08','2015-08-09','2015-09-09','2015-10-10') value = c(5, 10, 5, 3, 2) mean_run(x = value, k = 7, lag = 1, idx = as.Date(dates)) #[1] NA 5.0 7.5 NA NA

检查packagefunction文档
© www.soinside.com 2019 - 2024. All rights reserved.