使用R中的Highfrequency包将csv文件转换为xts的问题

时间:2019-02-27 18:20:43

标签: r time-series xts zoo posixct

我正在使用R中convert包中的Highfrequency函数。我正在使用的数据集是从WRDS下载的TAQ。数据看起来像This。 函数convert假定将.csv转换为xts对象的.RData文件。

我遵循软件包的说明并使用以下代码:

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 :(得分:0)

当我在提供链接的数据上运行代码时,出现第二个错误:

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:%M:%S”的时间。看起来这只是更完整的时间变量的分钟和秒部分,因为值仅包含一个冒号,而冒号前后的值从0到59.9不等。要解决此问题,需要找到时间变量的小时部分。

这两个问题导致tdobjectNA值而不是有效的日期时间填充,这在xts::xts()尝试按tdobject排序数据时导致错误

更普遍的问题似乎是函数highfrequency::convert()希望您的数据遵循WRDS网站上的here描述的格式,但是您的数据的列名略有不同,并且值可能不同格式。我建议您仔细阅读该WRDS页面和数据文件的文档,并确定数据中的哪些变量与该页面上描述的变量相对应(例如,我不清楚您的数据中是否包含等效的任何变量)到“ G127”)。