Я пытаюсь рассчитать скользящее/скользящее среднее по месяцам. Например, используя экономические данные из пакета ggplot2, я хочу построить сопутствующий временной ряд, представляющий 3-летнее скользящее среднее значение каждого месяца.
library(ggplot2)
df = economics
df$month = as.POSIXlt(df$date)$mon+1
Я получаю именно то, что хочу, когда вручную разбиваю ежемесячные данные:
library(zoo)
df.test = subset(df, month==1)
df.test$uempmed.ma = rollapply(df.test$unemploy, width=3, FUN=mean, na.rm=T,
fill=NA, align="right")
head(df.test)
date pce pop psavert uempmed unemploy year month uempmed.ma
8 1968-01-31 534.7 199920 9.5 4.5 3001 1968 1 NA
20 1969-01-31 590.2 201881 6.5 4.9 2692 1969 1 NA
32 1970-01-31 635.7 204008 8.1 4.5 3453 1970 1 3048.667
44 1971-01-31 681.3 206668 9.9 6.3 4903 1971 1 3682.667
56 1972-01-31 738.4 209061 9.4 6.6 4928 1972 1 4428.000
68 1973-01-31 828.5 211120 9.5 5.2 4452 1973 1 4761.000
Но, когда я пытаюсь использовать пакет plyr, чтобы сделать все месяцы одновременно ....
library(plyr)
df2 = ddply(df, .(month), mutate,
uempmed.ma = rollapply(df$uempmed, 3, FUN=mean, na.rm=T,
fill=NA, align="right")
)
....возвращается следующая ошибка:
Error: wrong result size (478), expected 40 or 1
Я знаю, что это должно быть довольно легко, но я в тупике.
В конечном счете, я хочу, чтобы ряд скользящих средних (т.е. uempmed.ma
) отставал, то есть не включал в расчет текущий год. Например, значение для 31-01-1971 сверху должно быть средним значением uempmed
для периодов времени 31-01-1968, 31-01-1969 и 31-01-1970.
Будем очень благодарны любой помощи.
library(zoo)
29.10.2014NA
в начале и удалить последнее значение, например:c(NA, head(rollapply(unemploy, width = 3, FUN = mean, na.rm = TRUE, fill = NA, align = "right"), -1))
29.10.2014