2016-01-15 3 views
1

Это продолжение этого вопроса R xts and data.table.R xts и data.table и IDate

Я вижу as.xts.data.table - это новое дополнение к пакету data.table.

Когда я установил даты с IDate (целыми датами), я тогда получаю ошибки при взгляде на таблицу после xts преобразования с этим сообщением об ошибке:

Ошибка в index.xts (х [1,]): неподдерживаемый 'indexClass' Тип индексации : Идате

КОД SNIPPET

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 исправить идентификаторы?

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

Ok @Roland сделано это как [# 1499] (HTTPS : //github.com/Rdatatable/data.table/issues/1499) – micstr

ответ

2

Обновление на 2016-04-13:
Это как раз было зафиксировано в последней версии развития данных. Таблица. Вам больше не нужно обрабатывать преобразование IDate. Код из вопроса будет работать нормально.
Ниже устаревший ответ, полезный для тех, кто находится на data.table 1.9.6 или ниже.


Необходимо изменить поле IDate на дату перед преобразованием в xts. Типы IDate и ITime не учитывались при разработке метода as.xts.
Патч для поддержки, который может быть выполнен, есть уже одно исправление, связанное с 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) 
+0

Спасибо @jangorecki. Я сделал такой рабочий процесс. Единственная проблема с dt [, date: = as.Date (as.integer (date))] - она ​​удаляет ключ, поскольку считается, что «дата» изменилась. (Другие знают об этом, а затем снова закроют вашу таблицу с помощью 'setkey()') – micstr