2012-05-29 4 views
3

Большинство пакетов и сообщений, которые я нашел, применяют к окну фиксированного размера или совокупным данным за месяц/неделю. Можно ли рассчитать среднее значение качения за месяц?Как рассчитать скользящее среднее за последние 1 месяц в R

Например, для 1 месяц окна прокатки, принимая данные есть:

Date   Value 
2012-05-28 101 
2012-05-25  99 
2012-05-24 102 
.... 
2012-04-30  78 
2012-04-27  82 
2012-04-26  77 
2012-04-25  75 
2012-04-24  76 

В первых три прокатных 1 месяц окна должно быть:

1. 2012-05-28 to 2012-04-30 
2. 2012-05-25 to 2012-04-26 
3. 2012-05-24 to 2012-04-25 

Пожалуйста, обратите внимание, что это НЕ окно с фиксированной шириной прокатки. Окно фактически меняется ежедневно.

Большое спасибо в продвинутом состоянии!

+1

Взгляните на 'rollmean' из пакета' zoo'. – Justin

+0

Посмотрите здесь: http://stackoverflow.com/q/743812/602276 – Andrie

+1

спасибо за быстрый ответ. но они применимы только к ФИКСИРОВАННЫМ окнам. – StanFish

ответ

1

Этот код используется для расчета среднемесячных значений в зависимости от ежедневных данных о ценах.

#function for extracting month is in the lubridate package 
install.packages(c("plyr", "lubridate")) 
require(plyr); require(lubridate) 

#read the daily data 
daily = read.csv("daily_lumber_prices.csv") 
price = daily$Open 
date = daily$Date 

#convert date to a usable format 
date = strptime(date, "%d-%b-%y") 
mon = month(date) 
T = length(price) 

#need to know when months change 
change_month = rep(0,T) 

for(t in 2:T){ 
    if(mon[t] != mon[t-1]){ 
    change_month[t-1] = 1 
    } 
} 

month_avg = rep(0,T) 
total = 0 
days = 0 

for(t in 1:T){ 
    if(change_month[t] == 0){ 
    #cumulative sums for each variable 
    total = total + price[t] 
    days = days + 1 
    } 

    else{ 
    #need to include the current month in the calculation 
    month_avg[t] = (total + price[t])/(days + 1) 
    #reset the variables 
    total = 0 
    days = 0 
    } 
} 

Таким образом, переменная month_avg хранит среднемесячные значения.

Это что-то вроде этого? Этот код учитывает переменные длины месяцев. Конечно, есть более эффективный способ сделать это, но это работает!

Смежные вопросы