R 将年/季度数据帧转换为时间序列

R 将年/季度数据帧转换为时间序列,r,dataframe,type-conversion,time-series,xts,R,Dataframe,Type Conversion,Time Series,Xts,我是R新手,需要做时间序列分析。我的数据当前位于数据框中。时间序列分析的适当格式似乎是ts或xts,具体取决于您阅读的文章。我只能通过我找到的信息来了解如何访问xts表单 我的问题是: 问题1:如何将数据帧转换为ts 问题2:将我的数据帧转换为xts的更好方法是什么 我所做的 时间序列数据需要包含感兴趣的变量x3以及分类变量。该系列应按年度和季度给出 数据与此类似: df <- data.frame(id = sprintf("%03d", 1:13),

我是R新手,需要做时间序列分析。我的数据当前位于数据框中。时间序列分析的适当格式似乎是
ts
xts
,具体取决于您阅读的文章。我只能通过我找到的信息来了解如何访问
xts
表单

我的问题是:

问题1:如何将数据帧转换为
ts

问题2:将我的数据帧转换为
xts
的更好方法是什么


我所做的 时间序列数据需要包含感兴趣的变量
x3
以及分类变量。该系列应按年度和季度给出

数据与此类似:

df <- data.frame(id = sprintf("%03d", 1:13),
                      year = c(2011, rep.int(2012,4), rep.int(2013,4), rep.int(2014,4)),
                      qtr = rep_len(c(4,1:3),13),
                      cat = sample(1:5, size=13, replace = TRUE),
                      x1 = sample.int(13)/100,
                      x2 = sample.int(13)/100,
                      x3 = sample.int(13)/100)

df
    id year qtr cat   x1   x2   x3
1  001 2011   4   4 0.10 0.05 0.11
2  002 2012   1   2 0.06 0.09 0.10
3  003 2012   2   1 0.12 0.02 0.03
4  004 2012   3   5 0.13 0.08 0.05
5  005 2012   4   1 0.04 0.06 0.04
6  006 2013   1   5 0.03 0.13 0.06
7  007 2013   2   4 0.05 0.12 0.12
8  008 2013   3   2 0.09 0.03 0.09
9  009 2013   4   4 0.11 0.01 0.13
10 010 2014   1   1 0.01 0.10 0.08
11 011 2014   2   2 0.08 0.07 0.07
12 012 2014   3   5 0.02 0.11 0.01
13 013 2014   4   3 0.07 0.04 0.02
这将产生:

> df.xts
          x3 cat
2011 Q4 0.11   4
2012 Q1 0.10   2
2012 Q2 0.03   1
2012 Q3 0.05   5
2012 Q4 0.04   1
2013 Q1 0.06   5
2013 Q2 0.12   4
2013 Q3 0.09   2
2013 Q4 0.13   4
2014 Q1 0.08   1
2014 Q2 0.07   2
2014 Q3 0.01   5
2014 Q4 0.02   3

我不认为我的解决方案会带来任何不一致,但它让人感觉“有黑客味”。我的问题是关于好的形式,就像学习数据操作一样。如果您能给我提供任何信息,我将不胜感激。

1)首先将其转换到zoo,然后从那里
as.xts
as.ts
将起作用:

z <- with(df, zoo(cbind(x3, cat), as.yearqtr(year + (qtr-1)/4)))
x <- as.xts(z) # omit this line if you don't need x; can also omit library(xts)
tt <- as.ts(z)
z简化了(2)。
z <- with(df, zoo(cbind(x3, cat), as.yearqtr(year + (qtr-1)/4)))
x <- as.xts(z) # omit this line if you don't need x; can also omit library(xts)
tt <- as.ts(z)
x <- with(df, xts(cbind(x3, cat), as.yearqtr(year + (qtr-1)/4)))
tt <- as.ts(as.zoo(x))
tt <- with(df, ts(cbind(x3, cat), start = c(year[1], qtr[1]), freq = 4))