R xts 和 data.table 和 IDate
R xts and data.table and IDate
这是这个问题的扩展 R xts and data.table。
我看到 as.xts.data.table
是 data.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)
这是这个问题的扩展 R xts and data.table。
我看到 as.xts.data.table
是 data.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)