Прочитайте таблицу временных рядов с помощью read.zoo
-
11-10-2019 - |
Вопрос
Я смотрел повсюду, но я не могу найти, где этот вопрос задавал ранее.
Что такое чистый способ донести эти данные в правильную серию зоопарка? Эта версия представляет собой копию/вставку, чтобы упростить этот пост, но она всегда будет в следующей форме таблицы (из текстового файла). My Read.zoo () заявление гласит год как индекс, но кварталы (QTR1, QTR2 и т. Д.) Считаются как имена столбцов. Я пытался определить, как не герб-способ прочитать колонны как «квартальную» часть индекса, но он неряшливо (слишком неряшливо, чтобы публиковать). Я предполагаю, что эта проблема уже была решена, но я не могу ее найти.
> 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
Из документации as.yearqtr () цель будет выглядеть как:
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
Решение
Прочитать в данных с помощью read.zoo
а затем преобразовать в zooreg
объект с 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)
Результат выглядит так:
> 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
Другие советы
read.zoo
Предполагается, что ваши данные имеют не более одного времени-индексного столбца, поэтому вы должны обработать это самостоятельно. Сначала прочитайте это в использовании read.table
zt <- read.table( textConnection( texinp ), header = TRUE)
затем преобразовать его в «длинную таблицу», используя melt
функция из 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
и, наконец, создайте желаемое zoo
объект:
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