Question

Je l'ai regardé dans tous les sens, mais je ne peux pas trouver où cette question a été posée.

Qu'est-ce qu'un moyen propre pour obtenir ces données dans une série appropriée de zoo? Cette version est une copie / coller pour rendre ce poste plus facile, mais il sera toujours venir sous la forme de tableau ci-dessous (à partir d'un fichier texte). Ma déclaration read.zoo () lit l'année comme l'indice, mais les quartiers (Trim1, Qtr2, etc.) sont lus comme noms de colonnes. J'ai essayé de trouver un moyen non-ordures de lire les colonnes que la partie « quart » de l'indice, mais il est bâclée (trop bâclée à la poste). Je devine que ce problème a déjà été résolu, mais je ne le trouve pas.

> 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  

De la documentation as.yearqtr (), la cible ressemblerait à ceci:

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    
Était-ce utile?

La solution

Lire dans les données en utilisant read.zoo et puis le convertir en un objet zooreg avec un indice de temps 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)

Les regards de résultat comme celui-ci:

> 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 

Autres conseils

read.zoo prend vos données a au plus une colonne de temps l'index, vous devez traiter vous-même. D'abord, il lu en utilisant read.table

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

puis le convertir en une « longue table » en utilisant la fonction melt du paquet 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

et enfin créer votre objet zoo souhaité:

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 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top