2016-01-15 50 views
1

這是此問題的擴展R xts and data.tableR xts和data.table和IDate

我看到as.xts.data.table是對data.table包的新增加。

當我設置日期與IDate(整數日期),I然後在表中的一個xts轉換與此錯誤消息照顧時得到的錯誤:在index.xts

誤差(X [1,] ):不支持的 'indexClass' 索引 類型:i日期

代碼段

library(data.table) 
library(xts) 

# I am setting dates as IDate here in example, but in my code 
# I get a subset from elsewhere 
dt <- data.table(date = c(as.IDate("2014-12-31"), 
          as.IDate("2015-12-31"), 
          as.IDate("2016-12-31")), 
       nav = c(100,101,99), 
       key = "date") 

str(dt) 
# Classes ‘data.table’ and 'data.frame': 3 obs. of 2 variables: 
# $ date: IDate, format: "2014-12-31" "2015-12-31" ... 
# $ nav : num 100 101 99 
# - attr(*, "sorted")= chr "date" 
# - attr(*, ".internal.selfref")=<externalptr> 


#convert to xts for PerformanceAnalytics (IDate not supported) 
dt.xts <- as.xts.data.table(dt) # seems to work okay but... 

str(dt.xts) # gives indexing type error above 

我明白IDate還在開發中 - 「還在試驗!」。在過渡期間擺脫IDate類型以使用xts的最佳方式是什麼? [我嘗試強制類型無效 - as.xts(as.Date(dt$date))]

未來as.xts.data.table可以修復IDates嗎?

R3.2.2。版本:XTS:0.9-7動物園:1/7-12 data.table:1.9.6

+0

請文件存在問題:https://github.com/Rdatatable/data.table/issues – Roland

+0

好吧@Roland做到了這一點爲[#1499](HTTPS ://github.com/Rdatatable/data.table/issues/1499) – micstr

回答

2

更新於2016年4月13日:
這剛剛被固定在數據的最新開發版。表。您無需再處理IDate的轉換。代碼從問題將工作得很好。
以下過時的答案,適用於data.table 1.9.6或更低版本的人。


您需要在轉換爲xts之前將您的IDate字段更改爲日期。當開發as.xts方法時,不考慮IDate和ITime類型。
修補程序支持可以進行的修復,已有一個與xts等待合併的bug修復。
解決問題的方法:

library(data.table) 
library(xts) 
dt <- data.table(date = c(as.IDate("2014-12-31"), 
          as.IDate("2015-12-31"), 
          as.IDate("2016-12-31")), 
       nav = c(100,101,99), 
       key = "date") 
dt[, date := as.Date(as.integer(date))] 
dt.xts <- as.xts.data.table(dt) 
+0

謝謝@jangorecki。我這樣做了一個workaropund。 dt [,date:= as.Date(as.integer(date))]中的一個問題 - 當「date」看起來發生了變化時,它會刪除鍵。 (其他人知道這一點,然後用'setkey()'重新生成你的表) – micstr