Domanda

Ho guardato dappertutto, ma non riesco a trovare dove questa domanda è stato chiesto prima.

Che cosa è un modo pulito per ottenere questi dati in una serie zoo corretta? Questa versione è una copia / incolla per rendere più facile questo post, ma sarà sempre venire nella forma seguente tabella (da un file di testo). Il mio read.zoo () dichiarazione si legge dell'anno come l'indice, ma i quartieri (Qtr1, Qtr2, ecc) vengono letti come nomi di colonna. Ho cercato di capire un modo non-spazzatura per leggere le colonne come la parte "quarto" dell'indice, ma è sciatto (troppo sciatta per post). Sto indovinando questo problema è già stato risolto, ma non riesco a trovarlo.

> 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  

Dalla documentazione as.yearqtr (), l'obiettivo sarà simile:

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    
È stato utile?

Soluzione

leggere i dati utilizzando read.zoo e quindi convertirlo in un oggetto con indice zooreg tempo 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)

Gli sguardi risultato come questo:

> 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 

Altri suggerimenti

read.zoo presuppone che i dati sono al massimo una sola volta colonna-index, in modo da avere per elaborare da soli. In primo luogo lo lesse nel usando read.table

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

quindi convertirlo in una "tavola lunga" utilizzando la funzione melt dal pacchetto 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

e, infine, creare l'oggetto zoo desiderata:

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 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top