Проблемы с преобразованием CSV-файла в XTS с использованием пакета Highfrequency в R - PullRequest
0 голосов
/ 27 февраля 2019

Я использую функцию convert в пакете Highfrequency в R. Я использую набор данных TAQ, загруженный из WRDS.Данные выглядят как Это .Функция convert предполагает преобразование .csv в .RData файлов объектов xts.

Я следую инструкциям пакета и использую следующий код:

library(highfrequency)

from <- "2017-01-05"
to <- "2017-01-05"
format <- "%Y%m%d %H:%M:%S"

datasource <- "C:/Users/feimo/OneDrive/SFU/Thesis-Project/R/IBM"
datadestination <- "C:/Users/feimo/OneDrive/SFU/Thesis-Project/R/IBM"

convert( from=from, to=to, datasource=datasource,
         datadestination=datadestination, trades = T, quotes = F,
         ticker="IBM", dir = T, extension = "csv",
         header = F, tradecolnames = NULL,
         format=format, onefile = T )

НоЯ получил следующее сообщение об ошибке:

> Error in `$<-.data.frame`(`*tmp*`, "COND", value = numeric(0)) :   
> replacement has 0 rows, data has 23855

Я считаю, что имена столбцов по умолчанию в этой функции: c("SYMBOL", "DATE", "EX", "TIME", "PRICE", "SIZE", "COND", "CORR", "G127"), что отличается от моего набора данных, поэтому я вручную изменил его в своем .csv, чтобы соответствовать ему,Затем я получил еще одну ошибку

>Error in xts(tdata, order.by = tdobject) : 'order.by' cannot contain 'NA', 'NaN', or 'Inf'

Попытался взглянуть на исходный код, но не смог найти решение.

Любое предложение будет действительно полезным.Спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Когда я запускаю ваш код для данных, на которые вы указываете ссылку, я получаю вторую ошибку, о которой вы упомянули:

Error in xts(tdata, order.by = tdobject) : 
  'order.by' cannot contain 'NA', 'NaN', or 'Inf'

Эта ошибка может быть прослежена до этих строк в функции highfrequency:::makeXtsTrades(),который вызывается highfrequency::convert():

tdobject = as.POSIXct(paste(as.vector(tdata$DATE), as.vector(tdata$TIME)), 
        format = format, tz = "GMT")
tdata = xts(tdata, order.by = tdobject)

Ошибка возникает из-за двух проблем:

  1. Переменная «DATE» в вашем файле данных читается в R какчисловой, тогда как кажется, что код, создающий tdobject, ожидает, что tdata$DATE будет символьным вектором.Вы можете исправить это, вручную преобразовав эту переменную в символьный вектор:

    tdata <- read.csv("IBM_trades.csv")
    tdata$DATE <- as.character(tdata$DATE)
    write.csv(tdata, file = "IBM_trades_DATE_fixed.csv", row.names = FALSE)
    
  2. Переменная «TIME_M» в вашем файле данных не является временем формата «% H:%».МИЗ".Похоже, что это только компонент минут и секунд более полной переменной времени, поскольку значения содержат только одно двоеточие, а значения до и после двоеточия варьируются от 0 до 59,9.Для решения этой проблемы потребуется найти компонент часов временной переменной.

Эти две проблемы приводят к заполнению tdobject значениями NA, а не действительными датами-временем, что приводит кошибка, когда xts::xts() пытается упорядочить данные по tdobject.

Более общая проблема, по-видимому, заключается в том, что функция highfrequency::convert() ожидает, что ваши данные будут соответствовать формату, описанному здесь на веб-сайте WRDS, но ваши данные имеют несколько разные имена столбцов и, возможно, разные форматы значений.Я бы рекомендовал внимательно посмотреть на эту страницу WRDS и документацию для вашего файла данных и определить, какие переменные в ваших данных соответствуют переменным, описанным на этой странице (например, мне не ясно, что ваши данные содержат любую переменную, которая эквивалентнана "G127").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...