Я думаю, что подготовка - это трудность с учетом некоторых прыжков. Так что я пытаюсь показать способ подготовки, прежде чем использовать уже упомянутую функцию runmean
пакета require(caTools)
. Сначала мы создаем примерные данные (которые вам не нужны, но для понимания). Во-вторых, я разделяю фрейм данных на список фреймов данных, по одному на каждый год и принимая средние значения за каждый год. Эти два шага можно было сделать сразу, но я думаю, что разделенный путь легче понять и адаптировать.
#example data
Days <- seq(as.Date("1958-01-01"), as.Date("2015-12-31"), by="days")
Values <- runif(length(Days))
DF <- data.frame(Days = Days, Values = Values)
#start of script
Years <- format(DF$Days, "%Y")
UniqueYears <- unique(format(DF$Days, "%Y"))
#Create subset of years
#look for every unique year which element of days is in this year.
YearlySubset <- lapply(UniqueYears, function(x){
DF[which(Years == x), ]
})
YearlyMeanValues <- sapply(YearlySubset, function(x){
mean(x$Values)
})
Теперь ход означает прикладывается:
#install.packages("caTools")
require(caTools)
RM <- data.frame(Years = UniqueYears, RunningMean30y = runmean(YearlyMeanValues, 30))
Просто, если я не получил вас прямо на первый, и вы хотите, чтобы некоторые бегущий в виду каждый день в течение примерно 30 лет, конечно, вы могли бы просто сделать:
RM <- cbind(DF, runmean(DF$Values, 365 * 30))
И учитывая ваши проблемы, создающей таймсериях:
DF[ , 1] <- as.Date(DF[ , 1], format = "%Y.%m.%d")
Это не должно быть временное (но представляющее собой ряд наблюдений), посмотрите http://www.inside-r.org/packages/cran/zoo/docs/rollmean или http://svitsrv25.epfl.ch/R-doc/library/caTools/html/runminmax.html – MLavoie
Пакет 'TTR' предоставляет все скользящие средние, о которых можно подумать. – RHertel
Функция 'movav()' из пакета 'prostr' также делает это – Frank