Lire une table de séries chronologiques utilisant read.zoo
-
11-10-2019 - |
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
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