我在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'
试图查看原始代码,但找不到解决方案。
任何建议都会非常有用。谢谢!
当我在您提供链接的数据上运行代码时,我会收到您提到的第二个错误:
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)
该错误来自两个问题:
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)
这两个问题导致tdobject
填充NA
值而不是有效的日期时间,这会导致xts::xts()
尝试通过tdobject
对数据进行排序时出错。
更普遍的问题似乎是函数highfrequency::convert()
期望您的数据遵循类似于WRDS网站上描述的here格式,但您的数据具有略微不同的列名称和可能不同的值格式。我建议仔细查看WRDS页面和数据文件的文档,并确定数据中的哪些变量与该页面上描述的变量相对应(例如,我不清楚您的数据是否包含任何等效的变量到“G127”)。