2010-11-28 103 views
38

我試圖使用as.xts()方法將數據幀轉換爲xts對象。這裏是我的輸入數據框問:將數據幀轉換爲xts

q 
         t x 
1 2006-01-01 00:00:00 1 
2 2006-01-01 01:00:00 2 
3 2006-01-01 02:00:00 3 

str(q) 
    'data.frame': 10 obs. of 2 variables: 
$ t: POSIXct, format: "2006-01-01 00:00:00" "2006-01-01 01:00:00" "2006-01-01 02:00:00" "2006-01-01 03:00:00" ... 
$ x: int 1 2 3 4 5 6 7 8 9 10 

結果是:

> as.xts(q) 
Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 

這是我能想到的最簡單的例子,所以這是相當令人沮喪的沒有得到它的工作...任何幫助不勝感激!

回答

15

那麼,as.xts默認假定日期存儲在data.frame的rownames中。因此錯誤信息。一個快速和骯髒的修復程序是:

rownames(q) = q[1] 
as.xts(q) 

但你得到一個額外的日期字符串列。理想情況下,您將構建數據框架,並將日期作爲rownames開始。

+1

可能應該是:`rownames(q)= q [[1]]` – 2013-10-03 02:36:17

+0

@ 42,會有什麼區別? – Ahmedov 2016-09-03 07:39:58

55

這清楚地記錄--- xtszoo目的是通過提供參數,一個或vector攜帶matrix數據和DatePOSIXctchron,...供給類型的時間信息(或在形成於殼體zoo的排序)。

所以這樣做

qxts <- xts(q[,-1], order.by=q[,1]) 

,你應該設置。

5

這是一個使用tidyquant包的解決方案,其中包含一個函數as_xts(),它將數據幀強制轉換爲一個xts對象。它還包含as_tibble()以將xts對象強制爲t((「整齊」數據幀)。

重新創建的數據幀(注意,日期 - 時間類在「整潔」的數據幀使用,但也可以使用任何明確的日期或日期時間類):

> q 
# A tibble: 3 × 2 
        t  x 
       <dttm> <dbl> 
1 2006-01-01 00:00:00  1 
2 2006-01-01 01:00:00  2 
3 2006-01-01 02:00:00  3 

使用as_xts()轉換爲「xts」課程。指定參數,date_col = t,指定了「T」列的日期爲行名使用:

> library(tidyquant) 
> as_xts(q, date_col = t) 
        x 
2006-01-01 00:00:00 1 
2006-01-01 01:00:00 2 
2006-01-01 02:00:00 3 

回報是一個xts對象與適當的日期或日期倍行的名稱。