【问题标题】:How can I read a date series of quarterly data into R?如何将日期系列的季度数据读入 R?
【发布时间】:2011-12-15 03:11:57
【问题描述】:

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

 1959-I   
 1959-II   
 1959-III   
 1959-IV    
 1960-I   
 1960-II   
 1960-III   
 1960-IV   

我已将数据集导入 R,但我不知道如何使用 as.Date 函数将其转换为 Date 格式,因为 there doesn't appear to be a conversion specification for quarters 而我刚刚开始学习 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 "

但这不可能是最好的方法,它仍然给我留下了如何处理我的系列quarters的问题。更糟糕的是,每个字符的末尾都有一个空白字符,我不知道如何处理,因为季度字符串有 3 种不同的“长度”。

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

quarters <- rep(c(1,2,3,4),dates[length(dates)]-dates[1])

(我为自己写了最后一行而感到自豪!)。

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

【问题讨论】:

  • 为每个季度值分配一个日期就足够了吗?即I = 01/01, II = 04/01, III = 07/01, IV = 10/01 或类似的东西?
  • @Chase,我真正想知道的是 R 是否识别季度数据,就像它识别年、月等一样。如果不是,那么我将不得不做其他事情,你的建议是绝对是一个选择(但肯定 R,一个如此完善的统计软件包,会有一个内置的替代方案?)
  • 我可以给你一个现成的解决方案,沿着第一条路走下去,但你很可能是正确的:内置替代方案。看起来ts 对象通过frequency = 4 参数支持季度数据。您可能还想查看CRAN Task View for Time Sieres。从我所见,包 zoo 和 xts 也非常健壮和灵活,所以它们可能有一些东西。我敢打赌,很快就会有人来给我们展示一些花哨的东西。
  • @Chase 我无法安装包“ts”,因为它似乎不适用于 R 版本 2.14(我检查了一些镜像,但不是全部)。我刚才又试了一次,还是不行。我去看看 zoo 或者 xts 有没有东西
  • ts 本身并不是一个包,它是默认加载的stats 包的一部分。您应该可以输入?ts 来查看帮助页面。这些例子有一个季度数据的例子。

标签: r


【解决方案1】:

假设我们有数据 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

zoo 包也有 "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

如果我们确实有一个不一定是连续的这些季度的向量:

dt <- c("1959-I", "1959-II", "1959-III", "1959-IV", "1960-I", "1960-II", 
      "1960-III", "1960-IV")

我们可以使用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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多