R xts 和 data.table 和 IDate

R xts and data.table and IDate

这是这个问题的扩展 R xts and data.table

我看到 as.xts.data.tabledata.table 包的新增内容。

当我使用 IDate(整数日期)设置日期时,在 xts 转换后查看 table 时出现错误消息:

Error in index.xts(x[1, ]) : unsupported ‘indexClass’ indexing type: IDate

代码片段

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 仍在开发中 - "Still experimental!"。摆脱 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

2016-04-13更新:
这刚刚在 data.table 的最新开发版本中得到修复。您不再需要处理 IDate 的转换。问题中的代码可以正常工作。
下面是过时的答案,对 data.table 1.9.6 或更低版本的人有用。


在转换为 xts 之前,您需要将 IDate 字段更改为 Date。开发 as.xts 方法时未考虑 IDate 和 ITime 类型。
可以制作补丁来支持,已经有一个与xts相关的错误修正等待合并。
您的问题的解决方案:

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)