R - Transform Data frame to Time Series [duplicate

2019-04-04 06:19发布

This question already has an answer here:

I have a Google stock data. It has two columns Date(Daily Data) and Close i.e. Google closing index.

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

and its in csv format and I read it through read.csv which return data frame object. When I tried to transform it into timeseries / ts() object, it returns unwanted numbers.

Please help me to convert data frame into ts() object.

Thanks in advance.

标签: r time-series
2条回答
该账号已被封号
2楼-- · 2019-04-04 06:24

I suggest using xts instead of ts as it has lot of functions especially for financial time series. If your data is in data.frame DF then you can convert it to xts as follows

xts(DF$Close, as.Date(DF$Date, format='%m/%d/%Y')
查看更多
我想做一个坏孩纸
3楼-- · 2019-04-04 06:31

Here's an approach using zoo from zoo package and then coercing the result to be 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"
查看更多
登录 后发表回答