2011-06-30 11 views
7

dado un ts mensuales objeto como este:Calcular la media mensual de TS objeto

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) 

¿Cómo puedo calcular los promedios por mes? es decir, quiero calcular el promedio de enero, año1 + enero, año2 + enero, año 3 ... etc. y luego ser capaz de establecer comparaciones a FEBRERO de ...

Un enfoque que pensé fue para convertirlo en una matriz de 12 columnas y utilizar colMeans(), pero me imagino que hay una manera mejor que aprovecha el aspecto de time() el objeto ts()?

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

Respuesta

8

Ok, así que debería dada Google una búsqueda más antes de llegar al SO ya que esto post is relevant. La función cycle() parece ser útil para este tipo de cosas:

> 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 
.... 

Algo más fundamental me falta aquí?

+0

Meses '1',' 2', '3', ... ¿se refieren a enero, febrero, marzo ...? En otras palabras, ¿cuál es el orden seguido por 'tapply' cuando devuelve los valores promedio? – FaCoffee

+1

@FaCoffee - en resumen, sí. Comprueba 'cycle (dat)' para ver lo que está haciendo debajo del capó y '? Cycle' también. – Chase

Cuestiones relacionadas