2015-12-14 22 views
1

我有一個隨機發生日期的數據集。例如:按時間段滾動平均值而非R中的觀察值

15年10月21日,15年11月21日,15年11月22日,11個/ 28/15,11/30/15中,15年12月12日...等

我期望在時間段內創建滾動平均值,而不是在觀察水平。例如,如果我想要做最後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) 

我當然希望爲更大的數據集這樣做,但我希望你明白這個主意。如果我以7天爲例,這是我期望的結果。

請注意,我不會將當前的觀察值包括在滾動平均值中,只包含前一個值。我希望按時間段平均滾動,而不是觀察行數。

我試着看rollmean和dplyr,但我無法弄清楚。我不在乎它是如何發生的。

謝謝!

+1

分裂過程分成多個部分組成:1,聚合成段,2.加盟系列的所有時期,填補了與NA的,你的數據潛在的差距3.申請rollmean – jangorecki

回答

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

我有相同的需求/問題,但想使用動物園系列日期和值。有沒有一種簡單的方法來使用動物園對象的日曆日期的滾動平均值?我發現的唯一方法是使用窗口函數來獲取系列的一個子集,但我一直在想可能有更好的方法。 – Ernie

+0

@Ernie爲什麼這個解決方案不起作用? –

+0

是的,我認爲你是對的。這將工作,但你顯然必須訪問動物園對象的日期索引,而不是有一個單獨的日期向量。但是,我還沒有嘗試過。 – Ernie