r - 使用R中的高频包将csv文件转换为xts的问题
问题描述
我在 Rconvert
中使用包中的函数。Highfrequency
我使用的数据集是从 WRDS 下载的 TAQ。数据看起来像This。该函数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'
试图查看原始代码,但找不到解决方案。
任何建议都会非常有帮助。谢谢!
解决方案
当我在您提供链接的数据上运行您的代码时,我收到您提到的第二个错误:
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
数据文件中的变量“DATE”作为数字读入 R,而创建的代码似乎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)
数据文件中的变量“TIME_M”不是“%H:%M:%S”格式的时间。看起来它只是一个更完整的时间变量的分钟和秒部分,因为值只包含一个冒号,冒号前后的值从 0 到 59.9 不等。解决这个问题需要找到时间变量的小时部分。
这两个问题导致tdobject
填充的是值而不是有效的日期时间,这在尝试对数据排序NA
时会导致错误。xts::xts()
tdobject
更普遍的问题似乎是该函数highfrequency::convert()
希望您的数据遵循 WRDS 网站上描述的格式,但您的数据的列名和值格式可能略有不同。我建议仔细查看该 WRDS 页面和数据文件的文档,并确定数据中的哪些变量与该页面上描述的变量相对应(例如,我不清楚您的数据是否包含任何等效的变量到“G127”)。
推荐阅读
- c - Linux内核在驱动读取函数中休眠
- node.js - PATH设置不生效
- c# - 使用 C# 2017 在 WebBroswer 控件中旋转图像
- javascript - 从日期范围计算工作日
- angular - 如果 URL 是手动编写的,则 Angular 刷新应用程序
- java - 尝试使用eclipse和hibernate 5连接到mysql数据库
- date - 在 Neo4J 中使用 Cypher 将 DateTime 转换为 Epoch 毫秒
- reactjs - 服务器端使用 Apollo GraphQL 和 React 在同构应用程序中渲染请求后清空缓存
- google-app-engine - Cron jobs don't get updated after deploying a new version
- c++ - 如何将“this”的生命周期移动到 C++ 中的另一个对象中?