如何将每日季度数据的日期系列读入R?

Viv*_*ivi 10 r

我有一个数据集,其第一列是Year-Quarter格式的日期,如下所示

 1959-I   
 1959-II   
 1959-III   
 1959-IV    
 1960-I   
 1960-II   
 1960-III   
 1960-IV   
Run Code Online (Sandbox Code Playgroud)

我已将数据集导入R,但我不知道如何Date使用该as.Date函数将其转换为格式,因为似乎没有季度的转换规范,我刚刚开始学习R.

我能想到的最好的就是

#extract the year
> dates <- substring(data$X,1,4)
> dates[1:8]
[1] "1959" "1959" "1959" "1959" "1960" "1960" "1960" "1960"
> dates <- as.numeric(dates)

#extract the quarter
> quarters <- substring(data$X,6)
> quarters[1:10]
[1] "I "   "II "  "III " "IV "  "I "   "II "  "III " "IV "
Run Code Online (Sandbox Code Playgroud)

但这不可能是这样做的最佳方式,它仍然留给我如何处理我的系列的问题quarters.更糟糕的是,每个角色的末尾都有一个空白字符我不知道如何处理,因为四分之一字符串有3种不同的"长度".

当然,另一种选择是制作我自己的宿舍系列,例如

quarters <- rep(c(1,2,3,4),dates[length(dates)]-dates[1])
Run Code Online (Sandbox Code Playgroud)

(我为自己撰写最后一行感到自豪!).

所以我的问题是:是否有一种内置的方式来导入我在R中的格式的季度数据,如果没有,还有其他任何格式(仍然用于季度数据)?关于最佳进展方式的任何建议?

G. *_*eck 18

假设我们有数据1:8,这对应于你提到的8个季度.然后我们可以这样做:

ts(1:8, start = c(1959, 1), frequency = 4)
##      Qtr1 Qtr2 Qtr3 Qtr4
## 1959    1    2    3    4
## 1960    5    6    7    8
Run Code Online (Sandbox Code Playgroud)

动物园包也有"yearqtr"类:

 library(zoo)

 z <- zooreg(1:8, start = as.yearqtr("1959-1"), frequency = 4)
 z
 ## 1959 Q1 1959 Q2 1959 Q3 1959 Q4 1960 Q1 1960 Q2 1960 Q3 1960 Q4 
 ##       1       2       3       4       5       6       7       8
Run Code Online (Sandbox Code Playgroud)

如果我们确实有一个不一定是连续的这种宿舍的向量:

dt <- c("1959-I", "1959-II", "1959-III", "1959-IV", "1960-I", "1960-II", 
      "1960-III", "1960-IV")
Run Code Online (Sandbox Code Playgroud)

我们可以转换它们gsubfn:

library(gsubfn)

g <- gsubfn("I.*", list(`I` = 1, `II` = 2, `III` = 3, `IV` = 4), dt)
g
## [1] "1959-1" "1959-2" "1959-3" "1959-4" "1960-1" "1960-2" "1960-3" "1960-4"

as.yearqtr(g)
## [1] "1959 Q1" "1959 Q2" "1959 Q3" "1959 Q4" "1960 Q1" "1960 Q2" "1960 Q3"
## [8] "1960 Q4"
Run Code Online (Sandbox Code Playgroud)