r - Moving averages -


i have daily data on 100 years looks

01.01.1856   12 02.01.1956   9 03.01.1956   -12 04.01.1956    7 etc.  

i wish calculate 30 year running average huge data. tried converting data time series cant still figure out how go it. prefer simple method has working data.frame.

i guess preparation difficulty considering leapyears. try show way preparing, before using mentioned function runmean of package require(catools). first create example data (which not necessary you, understanding). second divide data frame list of data frames, 1 each year , taking mean values each year. these 2 steps done @ once, think separated way easier understand , adapt.

#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 every unique year element of days in year. yearlysubset <- lapply(uniqueyears, function(x){               df[which(years == x), ]             }) yearlymeanvalues <- sapply(yearlysubset, function(x){               mean(x$values)             }) 

now running mean applied:

#install.packages("catools") require(catools) rm <- data.frame(years = uniqueyears, runningmean30y = runmean(yearlymeanvalues, 30)) 

just if didn't got right @ first , want running mean every day within 30 years, of course do:

rm <- cbind(df, runmean(df$values, 365 * 30)) 

and considering problems creating timeseries:

df[ , 1] <- as.date(df[ , 1], format = "%y.%m.%d") 

Comments

Popular posts from this blog

c - How to retrieve a variable from the Apache configuration inside the module? -

c# - Constructor arguments cannot be passed for interface mocks -

python - malformed header from script index.py Bad header -