将tbl_df转换为ts

时间:2018-12-04 01:11:48

标签: r time-series

我正在尝试将R中的tbl_df转换为ts时间序列。以下是我的数据帧的head():

    head(Investment)
# A tibble: 6 x 9
  TIME_PERIOD GPDI_Chained LogGPDI CorpTaxX Baseline_Uncertainty  gGDP PCE_Defl ofPagesFedReg logabsgGDP
  <chr>              <dbl>   <dbl>    <dbl>                <dbl> <dbl>    <dbl>         <dbl>      <dbl>
1 1985 Q1            1122.    3.05     20.2                 112.   3.9     1.82         50502      0.591
2 1985 Q2            1141.    3.06     19.8                 119.   3.6     1.75         50502      0.556
3 1985 Q3            1134.    3.05     20.6                 127.   6.2     1.77         50502      0.792
4 1985 Q4            1176.    3.07     20.1                 124.   3       1.82         50502      0.477
5 1986 Q1            1175.    3.07     23.8                 159.   3.8     1.60         44812      0.580
6 1986 Q2            1155.    3.06     24.3                 135.   1.8     1.12         44812      0.255

我尝试使用以下方法将Tibble强制转换为ts:

> DF <- read.table("file_path", header=TRUE, sep=",", row.names=NULL)
> InvestmentTS<-as.ts(DF)

产生:

> head(InvestmentTS)
     TIME_PERIOD GPDI_Chained  LogGPDI CorpTaxX Baseline_Uncertainty gGDP PCE_Defl ofPagesFedReg logabsgGDP
[1,]           1       1122.3 3.050109 20.23836             112.1454  3.9    1.818         50502  0.5910646
[2,]           2       1141.4 3.057438 19.78908             118.5357  3.6    1.751         50502  0.5563025
[3,]           3       1133.7 3.054498 20.64556             127.1788  6.2    1.770         50502  0.7923917
[4,]           4       1175.5 3.070223 20.05952             123.7795  3.0    1.825         50502  0.4771213
[5,]           5       1175.1 3.070075 23.80535             158.5329  3.8    1.597         44812  0.5797836
[6,]           6       1154.6 3.062432 24.26877             135.1720  1.8    1.115         44812  0.2552725

这里的问题是我丢失了“季度”列(TIME_PERIOD)。 现在,我还尝试使用以下方法将TIME_PERIOD列转换为yearqtr:

quarter<-c("1985-1" , ... , "2018-3")
> as.yearqtr(format(quarter), "%Y-%q")

但是,这是成功的,我不知道如何在ts中实现它,以便TIME_PERIOD列具有year_quarter日期而不是序数。

有人可以帮助解释如何将tbl_df转换为ts,以便显示TIME_PERIOD列中的日期吗?

如果这已经在其他地方回答了,或者我的回答太简单了,我事先表示歉意,我只是在学习R,并且只需要将此数据框设为ts即可,以便为我的时间序列回归模型运行一些诊断测试显然需要数据为ts。

谢谢。

3 个答案:

答案 0 :(得分:1)

我认为这可能对您有帮助。

tbl$TIME_PERIOD <- as.yearqtr(tbl$TIME_PERIOD, format = "%Y Q%q")
ts(tbl[,-1], start = as.yearmon(tbl$TIME_PERIOD[1]), frequency = 4)

样本数据:

tbl <- read.table(header = TRUE, sep = "|", text = "
TIME_PERIOD|GPDI_Chained|LogGPDI|CorpTaxX|Baseline_Uncertainty|gGDP|PCE_Defl|ofPagesFedReg|logabsgGDP
1985 Q1|1122.|3.05|20.2|112.|3.9|1.82|50502|0.591
1985 Q2|1141.|3.06|19.8|119.|3.6|1.75|50502|0.556
1985 Q3|1134.|3.05|20.6|127.|6.2|1.77|50502|0.792
1985 Q4|1176.|3.07|20.1|124.|3|1.82|50502|0.477
1986 Q1|1175.|3.07|23.8|159.|3.8|1.60|44812|0.580")

答案 1 :(得分:1)

将其转换为动物园对象z,然后转换为ts

library(zoo)

z <- read.zoo(tbl, FUN = as.yearqtr)
as.ts(z)

给予:

        GPDI_Chained LogGPDI CorpTaxX Baseline_Uncertainty gGDP PCE_Defl ofPagesFedReg logabsgGDP
1985 Q1         1122    3.05     20.2                  112  3.9     1.82         50502      0.591
1985 Q2         1141    3.06     19.8                  119  3.6     1.75         50502      0.556
1985 Q3         1134    3.05     20.6                  127  6.2     1.77         50502      0.792
1985 Q4         1176    3.07     20.1                  124  3.0     1.82         50502      0.477
1986 Q1         1175    3.07     23.8                  159  3.8     1.60         44812      0.580

注意

tbl <- 
structure(list(TIME_PERIOD = structure(1:5, .Label = c("1985 Q1", 
"1985 Q2", "1985 Q3", "1985 Q4", "1986 Q1"), class = "factor"), 
    GPDI_Chained = c(1122, 1141, 1134, 1176, 1175), LogGPDI = c(3.05, 
    3.06, 3.05, 3.07, 3.07), CorpTaxX = c(20.2, 19.8, 20.6, 20.1, 
    23.8), Baseline_Uncertainty = c(112, 119, 127, 124, 159), 
    gGDP = c(3.9, 3.6, 6.2, 3, 3.8), PCE_Defl = c(1.82, 1.75, 
    1.77, 1.82, 1.6), ofPagesFedReg = c(50502L, 50502L, 50502L, 
    50502L, 44812L), logabsgGDP = c(0.591, 0.556, 0.792, 0.477, 
    0.58)), class = "data.frame", row.names = c(NA, -5L))

答案 2 :(得分:0)

更新:我强烈建议使用新的tidyverts软件包将时间序列集成到tidyverse样式的工作流程中:

来自Rob Hyndman的Hyndsight博客, 2019年8月29日:

使用小工具整理时间序列数据

有一套用于整理时间序列分析的新软件包, 轻松融入整洁的工作方式。我们称这些为 tidyverts软件包,它们在tidyverts.org上可用。大部分 这些软件包的工作已经由Earo Wang和Mitchell完成 O’Hara-Wild。

第一个进入CRAN的软件包是tsibble,提供 使用整理工具来整理整齐的时态数据的数据基础架构。一种 tsibble(在猫中发音为“ ts”)是时间序列对象 这比使用ts,xts等现有类容易得多 和其他人。

...我希望微调将成为处理R中的时态数据(包括多元时间序列,面板数据,ets)的标准。我已经使用它们大约一年了,但我仍然惊讶于做事比使用其他结构要容易得多。