2011-06-30 11 views
7

otrzymują miesięczne ts obiekt, taki jak ten:Oblicz średnia miesięczna ts obiektu

dat <- ts(c(295, 286, 300, 278, 272, 268, 308, 321, 313, 308, 291, 296, 
294, 273, 300, 271, 282, 285, 318, 323, 313, 311, 291, 293, 297, 
273, 294, 259, 276, 294, 316, 325, 315, 312, 292, 301), frequency = 12) 

Jak mogę obliczyć średnie przez miesiąc? tj. chcę obliczyć średnią stycznia, roku1 + stycznia, roku2 + stycznia, roku 3 ... itd. a następnie być w stanie wyciągnąć porównań do lutowej ...

Jedno podejście myślałem było przekształcić go w matrycę 12 kolumn i korzystać colMeans(), ale mogę sobie wyobrazić, istnieje lepszy sposób, że wykorzystuje time() aspekt obiekt ts()?

colMeans(matrix(dat, ncol = 12, byrow = TRUE)) 

Odpowiedz

8

Ok, więc mam podane Google jeden więcej przeszukiwanie przed przybyciem do SO jak ten post is relevant. Funkcja cycle() wydaje się być przydatny dla tego rodzaju rzeczy:

> tapply(dat, cycle(dat), mean) 
     1   2   3   4   5   6   7   8   9 
295.33333 277.33333 298.00000 269.33333 276.66667 282.33333 314.00000 323.00000 313.66667 
     10  11  12 
310.33333 291.33333 296.66667 

> aggregate(c(dat), list(month = cycle(dat)), mean) 
    month   x 
1  1 295.33333 
2  2 277.33333 
3  3 298.00000 
.... 

Wszystko inne fundamentalne mi brakuje tutaj?

+0

Miesiące '1',' 2', '3', ... czy odnoszą się do Jana, lutego, marca ...? Innymi słowy, jaka jest kolejność, po której następuje "tapply", gdy zwraca średnie wartości? – FaCoffee

+1

@FaCoffee - w skrócie, tak. Sprawdź 'cycle (dat)', aby zobaczyć, co robi pod maską i '' cycle' też. – Chase