Médias diárias em série de 10 anos

Problema chato, pessoal: Tenho um data.frame com quatro colunas: variable, date, value e unit. O data.frame foi construído com medidas diárias de 10 anos de cada variável, portanto a data vai de 1 de janeiro de 1980 a aproximadamente 31 de dezembro de 1989 para cada variável. Aqui vai uma amostra do df:
tsvars[1:20,] variable date value unit 2 toa radiation 1980-01-01 258.8793 W/m^2 3 toa radiation 1980-01-02 289.1413 W/m^2 4 toa radiation 1980-01-03 264.9647 W/m^2 5 toa radiation 1980-01-04 291.8841 W/m^2 6 toa radiation 1980-01-05 269.4446 W/m^2 7 toa radiation 1980-01-06 286.0237 W/m^2 8 toa radiation 1980-01-07 274.6440 W/m^2 9 toa radiation 1980-01-08 277.9688 W/m^2 10 toa radiation 1980-01-09 272.6379 W/m^2 11 toa radiation 1980-01-10 273.0654 W/m^2 12 toa radiation 1980-01-11 278.9035 W/m^2 13 toa radiation 1980-01-12 267.1813 W/m^2 14 toa radiation 1980-01-13 270.5033 W/m^2 15 toa radiation 1980-01-14 279.6346 W/m^2 16 toa radiation 1980-01-15 262.5689 W/m^2 17 toa radiation 1980-01-16 267.4670 W/m^2 18 toa radiation 1980-01-17 273.8332 W/m^2 19 toa radiation 1980-01-18 271.3236 W/m^2 20 toa radiation 1980-01-19 271.2731 W/m^2 21 toa radiation 1980-01-20 269.9610 W/m^2
Ao todo eu tenho quatro variáveis e pra cada uma delas há 365 valores (um para cada dia do ano). O dataframe é muito longo e não vou postá-lo completo aqui, mas vejam a saída do str():
str(tsvars) 'data.frame':18290 obs. of 4 variables: $ variable: Factor w/ 5 levels "latent","sensible",..: 4 4 4 4 4 4 4 4 4 4 ... $ date : Date, format: "1980-01-01" "1980-01-02" "1980-01-03" ... $ value : num 259 289 265 292 269 ... $ unit : chr "W/m^2" "W/m^2" "W/m^2" "W/m^2" ...
O que eu preciso fazer é criar a média de cada dia individual dos 10 anos. Ou seja, preciso de uma média para o dia 01/jan, que vai ser a média de todos os 01/jan da série, 02/jan, 03/jan e assim por diante. O detalhe é que a coluna "date" está de fato formatada como data, o que talvez complique as coisas. E eu preciso que ela continue assim, pois facilita na hora de plotar a série temporal. Na sua opinião, qual é a melhor abordagem para tirar a média de cada dia da série, como descrito acima? Saudações, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/inde... Phone: (612) 323 9898

Crie uma variável que identifique cada dia sem o ano. Pode usar o dia juliano ("%j") ou combinação de mês com dia ("%m/%d"). Depois você aplica estatísticas por estrato, como média por dia. da <- data.frame(x=seq(as.Date("1980-01-01"), as.Date("1990-12-31"), by="day")) da$y <- rnorm(da$x) str(da) da$j <- format(da$x, format="%j") # dia juliano 1-366 da$j <- format(da$x, format="%m/%d") # mês/dia range(da$j) db <- aggregate(y~j, da, mean) str(db) db$j <- as.Date(db$j, format="%m/%d") plot(y~j, db, type="b") À disposição. Walmes.

Obrigado pela dica Walmes, ela definitivamente me ajudou a resolver o problema. A única mudança que tive que fazer foi no cálculo das médias, pois além do dia eu também precisava que fosse por variável. Nesse caso eu acabei usando o plyr: db = ddply(da, .(j, variable), summarise, value = mean(value)) Saudações, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/inde... Phone: (612) 323 9898 On Sunday, November 17, 2013 7:31 AM, walmes . <walmeszeviani@gmail.com> wrote: Crie uma variável que identifique cada dia sem o ano. Pode usar o dia juliano ("%j") ou combinação de mês com dia ("%m/%d"). Depois você aplica estatísticas por estrato, como média por dia. da <- data.frame(x=seq(as.Date("1980-01-01"), as.Date("1990-12-31"), by="day")) da$y <- rnorm(da$x) str(da) da$j <- format(da$x, format="%j") # dia juliano 1-366 da$j <- format(da$x, format="%m/%d") # mês/dia range(da$j) db <- aggregate(y~j, da, mean) str(db) db$j <- as.Date(db$j, format="%m/%d") plot(y~j, db, type="b") À disposição. Walmes.
participantes (2)
-
Thiago V. dos Santos
-
walmes .