Pregunta

He mirado por todo el lugar, pero no puedo encontrar dónde esta pregunta se ha hecho antes.

¿Qué es una forma limpia para obtener estos datos en una serie zoológico adecuado? Esta versión es un copiar / pegar para hacer este post más fácil, pero siempre vendrá en la siguiente forma de tabla (a partir de un archivo de texto). Mi declaración read.zoo () lee el año como el índice, pero los cuartos (Qtr1, Qtr2, etc) se leen como nombres de columna. He estado tratando de encontrar una manera no-basura para leer las columnas como la parte "cuarto" del índice, pero es descuidado (demasiado descuidado a post). Supongo que este problema ya ha sido resuelto, pero no puedo encontrarlo.

> texinp <- "   
+ Year   Qtr1  Qtr2  Qtr3  Qtr4   
+ 1992    566   443   329   341   
+ 1993    344   212   133   112   
+ 1994    252   252   199   207"   
> z <- read.zoo(textConnection(texinp), header=TRUE)
> z  

A partir de la documentación as.yearqtr (), el objetivo se vería así:

1992 Q1 1992 Q2 1992 Q3 1992 Q4 1993 Q1 1993 Q2 1993 Q3 1993 Q4    
    566     443     329     341     344     212     133     112      

1994 Q1 1994 Q2 1994 Q3 1994 Q4     
    252     252     199     207    
¿Fue útil?

Solución

Leer en los datos utilizando read.zoo y luego convertirlo en un objeto zooreg con índice de tiempo yearqtr:

texinp <- "Year   Qtr1  Qtr2  Qtr3  Qtr4   
1992    566   443   329   341   
1993    344   212   133   112   
1994    252   252   199   207"

library(zoo)

z <- read.zoo(text = texinp, header=TRUE)
zz <- zooreg(c(t(z)), start = yearqtr(start(z)), freq = 4)

El resultado es similar al siguiente:

> zz

1992 Q1 1992 Q2 1992 Q3 1992 Q4 1993 Q1 1993 Q2 1993 Q3 1993 Q4 1994 Q1 1994 Q2 1994 Q3 1994 Q4 
    566     443     329     341     344     212     133     112     252     252     199     207 

Otros consejos

read.zoo asume sus datos tiene como máximo la columna de un índice de tiempo, así que hay que procesar esto por sí mismo. Primero leyó en el uso de read.table

zt <- read.table( textConnection( texinp ), header = TRUE)

A continuación, convertirlo en una "tabla larga" usando la función melt del paquete reshape:

require(reshape)
zt.m <- melt( zt, id = 'Year', variable_name = 'Qtr')

> zt.m
   Year  Qtr value
1  1992 Qtr1   566
2  1993 Qtr1   344
3  1994 Qtr1   252
4  1992 Qtr2   443
5  1993 Qtr2   212
6  1994 Qtr2   252
7  1992 Qtr3   329
8  1993 Qtr3   133
9  1994 Qtr3   199
10 1992 Qtr4   341
11 1993 Qtr4   112
12 1994 Qtr4   207

y finalmente crear el objeto de zoo deseada:

z <- with( zt.m, zoo( value, as.yearqtr(paste(Year, Qtr), format = '%Y Qtr%q')))

> z
1992 Q1 1992 Q2 1992 Q3 1992 Q4 1993 Q1 1993 Q2 1993 Q3 1993 Q4 1994 Q1 1994 Q2 
    566     443     329     341     344     212     133     112     252     252 
1994 Q3 1994 Q4 
    199     207 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top