将数据框转换为时间序列(R语言)

14

我有一份谷歌股票数据。它有两列数据,一是日期(每日数据),二是收盘指数即谷歌的收盘指数。

Date    Close
10/11/2013  871.99
10/10/2013   868.24
10/9/2013    855.86
10/8/2013   853.67
10/7/2013   865.74
10/4/2013   872.35
10/3/2013   876.09
10/2/2013   887.99
10/1/2013   887
9/30/2013   875.91
9/27/2013   876.39
9/26/2013   878.17
9/25/2013   877.23
9/24/2013   886.84

这个数据以csv格式存在,我使用read.csv函数读取后获得数据框架对象。但当我尝试将它转化成时间序列/ts()对象时,得到了意外的数字。

请帮我将数据框架转换为ts()对象。

提前致谢。

2个回答

14

我建议使用xts而不是ts,因为它有很多专门针对金融时间序列的函数。 如果你的数据在数据框DF中,则可以按如下方式将其转换为xts

xts(DF$Close, as.Date(DF$Date, format='%m/%d/%Y')

我需要数据以 ts 格式,因为我需要在预测中使用此对象。 - Ajay
@geektrader,format 不应该是 format='%m/%d/%Y' 吗? - Jilber Urbina
3
好的,你建议......但是为什么?相比于ts,xts有什么优势? - user2074102

7

这里有一种使用zoo包的方法,然后将结果强制转换为ts

> library(zoo)
> ZOO <- zoo(df$Close, order.by=as.Date(as.character(df$Date), format='%m/%d/%Y'))
> ZOO
2013-09-24 2013-09-25 2013-09-26 2013-09-27 2013-09-30 2013-10-01 2013-10-02 2013-10-03 2013-10-04 
    886.84     877.23     878.17     876.39     875.91     887.00     887.99     876.09     872.35 
2013-10-07 2013-10-08 2013-10-09 2013-10-10 2013-10-11 
    865.74     853.67     855.86     868.24     871.99 
> ts(ZOO)  # coercing to be `ts`
Time Series:
Start = 1 
End = 14 
Frequency = 1 
 [1] 886.84 877.23 878.17 876.39 875.91 887.00 887.99 876.09 872.35 865.74 853.67 855.86 868.24
[14] 871.99
attr(,"index")
 [1] "2013-09-24" "2013-09-25" "2013-09-26" "2013-09-27" "2013-09-30" "2013-10-01" "2013-10-02"
 [8] "2013-10-03" "2013-10-04" "2013-10-07" "2013-10-08" "2013-10-09" "2013-10-10" "2013-10-11"

谢谢Jiber。但是当我尝试对上述ts()对象进行绘图时,x轴上出现了一些数字,如0、50、100...,但它应该是“日期”。 - Ajay
@Ajay 请阅读 G. Grothendieck 在 这个问题 上的解释。 - Jilber Urbina
在使用 forecast 包时,最好采用 zoo 方法(因为在加载 forecast 时会同时加载 zoo)。 - Jubbles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接