2011-10-24 5 views
6

Estimada comunidad,zoológico objeto de agregación

los datos que reciba estará en una trama de datos:

Var_1  Var_2   Date  VaR_3 VaR_4 VaR_5 Var_6 
1   4  2010-01-18   7 apple 10 sweet 
2   5  2010-07-19   8 orange 11 sour 
3   6  2010-01-18   9 kiwi  12 juicy 
...  ...  ...    ... ...  ... ... 

me gustaría utilizar zoológico, ya que parece ser una clase de objeto flexible. Estoy empezando con R e intenté leer la descripción (viñetas) del paquete.

Preguntas:

  1. Dados los datos anteriores como una trama de datos, lo que se recomienda el método para convertir el df completa en un objeto zoológico, contando zoológico que se utilizará la tercera columna como columna de fecha (fechas pueden ocurrir varias veces en los datos)?
  2. ¿Cómo agrego todas las demás columnas mensualmente, excepto las columnas 4 y 6 con las funciones incorporadas del zoo? ¿El zoo puede descartar automáticamente las variables categóricas y simplemente usar aquellas columnas que son adecuadas para la agregación?
  3. Cómo agrego todas las columnas numéricas mensualmente, para cada categoría en la columna 4 (la columna 6 no se incluirá, ya que no es numérica).

Gracias por su apoyo.

+0

parece funcionar para la pregunta 1: df.z <-read.zoo (df, index.column = 3, agregada = F) – John

Respuesta

4

Los objetos zoo son series temporales y normalmente son vectores numéricos o matrices. Parece que lo que realmente tienes es un montón de series temporales diferentes en las que la columna 5 identifica qué serie es. Es decir, hay una serie de manzanas, una serie naranja, una serie kiwi, etc. y cada una de ellas tiene varias columnas.

Desconexión de la última columna ya que no es numérico, utilizando la tercera columna como el índice y la división en la columna 5 tenemos:

# create test data 
Lines <- "Var_1  Var_2   Date  VaR_3 VaR_4 VaR_5 Var_6 
1   4  2010-01-18   7 apple 10 sweet 
2   5  2010-07-19   8 orange 11 sour 
3   6  2010-01-18   9 kiwi  12 juicy" 
cat(Lines, "\n", file = "data.txt") 

library(zoo) 
z <- read.zoo("data.txt", header = TRUE, index = 3, split = "VaR_5", 
    colClasses = c(Var_6 = "NULL")) 

El resultado es:

> z 
      Var_1.apple Var_2.apple VaR_3.apple VaR_5.apple Var_1.kiwi 
2010-01-18   1   4   7   10   3 
2010-07-19   NA   NA   NA   NA   NA 
      Var_2.kiwi VaR_3.kiwi VaR_5.kiwi Var_1.orange Var_2.orange 
2010-01-18   6   9   12   NA   NA 
2010-07-19   NA   NA   NA   2   5 
      VaR_3.orange VaR_5.orange 
2010-01-18   NA   NA 
2010-07-19   8   11 

Lo anterior supone que para un valor dado de la columna 5 que las fechas son únicas. Si ese no es el caso, incluya el argumento aggregate = mean o algún otro valor para aggregate.

ahora a agregarse en una serie mensual zoológico tenemos:

aggregate(z, as.yearmon, mean) 

También sería posible convertir enseguida a mensual utilizando el FUN = as.yearmon argumento:

zm <- read.zoo("data.txt", header = TRUE, index = "Date", split = "VaR_4", 
    FUN = as.yearmon, colClasses = c(Var_6 = "NULL"), aggregate = mean) 

Ver ?read.zoo , vignette("zoo-read"), ?aggregate.zoo y las otras viñetas y archivos de ayuda también.

+0

Estimado Gabor, gracias por su respuesta y las sugerencias reflexivas. En realidad, mi conjunto de datos es más complejo. Para el ejemplo, reduje el marco de datos de una manera tal que muestra las propiedades más importantes. Se desconoce qué columna para la división se utilizará. Hay muchas más columnas que contienen números o categorías. Usando su método, tengo que ordenarlos manualmente cuando quiero realizar una agregación a través del objeto del zoológico.¿Hay alguna forma de usar una prueba lógica en cada columna para que se resuma y guarde solo las columnas del objeto del zoo que contienen datos numéricos? – John

+0

Para aclarar un poco más: en el primer paso me gustaría agregar como se describe en todos los datos. El segundo paso será dividir por categorías. Existe la posibilidad de que para cada categoría haya entradas en la misma fecha. Sin embargo, esto debería estar bien, ya que me gustaría determinar en la mayoría de los casos solo la suma, la media y la cantidad absoluta de conteos para cada mes. – John

+0

Creo que asume que el objeto tiene columnas numéricas y no numéricas. Los objetos del zoo se basan en vectores o matrices y no pueden contener mezclas de diferentes clases. Todos deberían ser numéricos en este caso. No está claro a qué te refieres con qué columna dividir se desconoce. Al final, tendrás que saber qué es. Puede leer los datos en un data.frame y usar read.zoo en el marco de datos (el primer arg de read.zoo puede ser un marco de datos). Esto se puede hacer varias veces con diferentes divisiones para obtener diferentes objetos del zoológico si lo desea. –

Cuestiones relacionadas