Leer datos de series de tiempo trimestrales como fechas en R

Year    A        B        C            D        E        F
1993-Q1 15.3    5.77    437.02      487.68     97       86.9
1993-Q2 13.5    5.74    455.2       504.5      94.7     85.4
1993-Q3 12.9    5.79    469.42      523.37     92.4     82.9
:::
2021-Q1 18.3    6.48    35680.82    29495.92    182.2   220.4
2021-Q2 7.9     6.46    36940.3     30562.03    180.4   218

Dataset1 <- read.csv('C:/Users/s/Desktop/R/intro/data/Dataset1.csv')

 class(Dataset1)
 [1] "data.frame"

time_series <- ts(Dataset1, start=1993, frequency = 4)

class(time_series)
[1] "mts"    "ts"     "matrix"

¡No sé cómo proceder desde allí para leer mi columna Año como fechas (trimestrales) en lugar de números!

Answer

La clase de fecha no funciona bien con la clase ts. Es mejor usar año y trimestre. Usando la entrada que se muestra de forma reproducible en la Nota al final, use read.csv.zoo con la clase yearqtr y luego conviértalo a ts. El strip.white probablemente no sea necesario, pero lo agregamos por si acaso.

library(zoo)

z <- read.csv.zoo("Dataset1.csv", FUN = as.yearqtr, format = "%Y-Q%q",
  strip.white = TRUE)
tt <- as.ts(z)

tt
##            A    B      C      D    E    F
## 1993 Q1 15.3 5.77 437.02 487.68 97.0 86.9
## 1993 Q2 13.5 5.74 455.20 504.50 94.7 85.4
## 1993 Q3 12.9 5.79 469.42 523.37 92.4 82.9

class(tt)
## [1] "mts"    "ts"     "matrix"

as.integer(time(tt)) # years
## [1] 1993 1993 1993

cycle(tt)  # quarters
##      Qtr1 Qtr2 Qtr3
## 1993    1    2    3

as.numeric(time(tt)) # time in years
## [1] 1993.00 1993.25 1993.50

Si quisiera usar la clase Fecha, sería mejor usar una serie zoo (o xts).

zd <- aggregate(z, as.Date, c)
zd
##               A    B      C      D    E    F
## 1993-01-01 15.3 5.77 437.02 487.68 97.0 86.9
## 1993-04-01 13.5 5.74 455.20 504.50 94.7 85.4
## 1993-07-01 12.9 5.79 469.42 523.37 92.4 82.9

Si desea un marco de datos o un objeto xts fortify.zoo(z), puede usar fortify.zoo(zd), as.xts(z)o as.xts(zd)según el que desee.

Nota

Lines <- "Year,A,B,C,D,E,F
1993-Q1,15.3,5.77,437.02,487.68,97,86.9
1993-Q2,13.5,5.74,455.2,504.5,94.7,85.4
1993-Q3,12.9,5.79,469.42,523.37,92.4,82.9
"
cat(Lines, file = "Dataset1.csv")

lubridatetiene una función de trimestre de año realmente agradable yq para convertir trimestres de año en fechas.

Dataset1<-structure(list(Year = c("1993-Q1", "1993-Q2", "1993-Q3", "1993-Q4", "1994-Q1", "1994-Q2"), ChinaGDP = c(15.3, 13.5, 12.9, 14.1, 14.1, 13.3), Yuan = c(5.77, 5.74, 5.79, 5.81, 8.72, 8.7), totalcredit = c(437.02, 455.2, 469.42, 521.68, 363.42, 389.01), bankcredit = c(487.68, 504.5, 523.37, 581.83, 403.48, 431.06), creditpercGDP = c(97, 94.7, 92.4, 95.6, 91.9, 90), creditGDPratio = c(86.9, 85.4, 82.9, 85.7, 82.8, 81.2)), row.names = c(NA, 6L), class = "data.frame")


library(lubridate)
library(dplyr)

df_quarter <- Dataset1 %>% 
  mutate(date=yq(Year)) %>%
  relocate(date, .after=Year)
  
df_quarter
#>      Year       date ChinaGDP Yuan totalcredit bankcredit creditpercGDP
#> 1 1993-Q1 1993-01-01     15.3 5.77      437.02     487.68          97.0
#> 2 1993-Q2 1993-04-01     13.5 5.74      455.20     504.50          94.7
#> 3 1993-Q3 1993-07-01     12.9 5.79      469.42     523.37          92.4
#> 4 1993-Q4 1993-10-01     14.1 5.81      521.68     581.83          95.6
#> 5 1994-Q1 1994-01-01     14.1 8.72      363.42     403.48          91.9
#> 6 1994-Q2 1994-04-01     13.3 8.70      389.01     431.06          90.0
#>   creditGDPratio
#> 1           86.9
#> 2           85.4
#> 3           82.9
#> 4           85.7
#> 5           82.8
#> 6           81.2

Creado el 2022-01-15 por el paquete reprex (v2.0.1)