导入按日期索引的 csv 时出现问题
Problems import csv indexed by dates
我正在尝试导入一个包含 OHLC 数据的 csv 文件以与 quantmod 一起使用。我不断收到日期列错误。
这里是错误:
Error in read.zoo(file2, sep = ",", format = "%Y-%m-%d h:m:s.S", header = TRUE, : index has 4706262 bad entries at data rows: 1 2 3...
我用什么导入数据:
zz <- read.zoo(file2, sep = ",",format="%Y-%m-%d h:m:s.S",
header=TRUE,index.column=1,colClasses=c("character",rep("numeric",5)))
head(zz)
xx<- as.xts(zz)
我试着查看 docs,但没有帮助。
这是我的 csv 文件中的示例
time,open,high,low,close,volume,
2005-01-02 10:29:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:38:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:51:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 10:52:00.0,1.3565,1.3565,1.3565,1.3565,1,
2005-01-02 10:55:00.0,1.3568,1.3568,1.3568,1.3568,1,
2005-01-02 10:57:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 11:04:00.0,1.3569,1.3569,1.3569,1.3569,1,
2005-01-02 11:07:00.0,1.357,1.357,1.3569,1.3569,2,
问题中的format
(参见?strptime
)和colClasses
(参见?read.table
)参数是错误的,其中指定的一些参数是不必要的。
1) 以下较短的代码应该可以。当时它忽略了点之后的部分,但无论如何它都是零所以没关系。如果实际数据中某些行中的点后有非零数字,请参阅上面提到的帮助文件,了解要在 format
.
中使用的正确百分比代码
library(zoo)
read.zoo(text = Lines, header = TRUE, sep = ",", colClasses = c(X = "NULL"))
给予:
open high low close volume
2005-01-02 10:29:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:38:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:51:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 10:52:00 1.3565 1.3565 1.3565 1.3565 1
2005-01-02 10:55:00 1.3568 1.3568 1.3568 1.3568 1
2005-01-02 10:57:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 11:04:00 1.3569 1.3569 1.3569 1.3569 1
2005-01-02 11:07:00 1.3570 1.3570 1.3569 1.3569 2
(我们使用 text = Lines
来保持这个自包含 - Lines
在下面的注释中给出 - 您可以将其替换为问题中的文件名。)
1a) 更短的是下面的。
read.csv.zoo(text = Lines, colClasses = c(X = "NULL"))
2)交替使用,这种两步走的方法特别简单:
DF <- read.csv(text = Lines)[-7]
read.zoo(DF)
3)
library(zoo)
read.zoo(text = Lines, read = function(...) read.csv(...)[-7])
注: 输入为:
Lines <- "
time,open,high,low,close,volume,
2005-01-02 10:29:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:38:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:51:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 10:52:00.0,1.3565,1.3565,1.3565,1.3565,1,
2005-01-02 10:55:00.0,1.3568,1.3568,1.3568,1.3568,1,
2005-01-02 10:57:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 11:04:00.0,1.3569,1.3569,1.3569,1.3569,1,
2005-01-02 11:07:00.0,1.357,1.357,1.3569,1.3569,2,"
更新: 最初发布时,此处的一些命令需要 zoo 的开发版本,但现在已发布,因此它们都可以在 CRAN 上与常规 zoo 一起使用。
假设您的数据在一个名为 ‘testFile.csv’
的文件中并且在您的工作目录中,您可以执行以下操作来获取 xts-object
的请求:
testFile <- read.csv("testFile.csv", header=TRUE, colClasses=c("character",rep("numeric",5),NULL))
>as.xts(testFile[,2:6],order.by = as.POSIXct(testFile[,1]))
open high low close volume
2005-01-02 10:29:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:38:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:51:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 10:52:00 1.3565 1.3565 1.3565 1.3565 1
2005-01-02 10:55:00 1.3568 1.3568 1.3568 1.3568 1
2005-01-02 10:57:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 11:04:00 1.3569 1.3569 1.3569 1.3569 1
2005-01-02 11:07:00 1.3570 1.3570 1.3569 1.3569 2
我正在尝试导入一个包含 OHLC 数据的 csv 文件以与 quantmod 一起使用。我不断收到日期列错误。
这里是错误:
Error in read.zoo(file2, sep = ",", format = "%Y-%m-%d h:m:s.S", header = TRUE, : index has 4706262 bad entries at data rows: 1 2 3...
我用什么导入数据:
zz <- read.zoo(file2, sep = ",",format="%Y-%m-%d h:m:s.S",
header=TRUE,index.column=1,colClasses=c("character",rep("numeric",5)))
head(zz)
xx<- as.xts(zz)
我试着查看 docs,但没有帮助。
这是我的 csv 文件中的示例
time,open,high,low,close,volume,
2005-01-02 10:29:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:38:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:51:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 10:52:00.0,1.3565,1.3565,1.3565,1.3565,1,
2005-01-02 10:55:00.0,1.3568,1.3568,1.3568,1.3568,1,
2005-01-02 10:57:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 11:04:00.0,1.3569,1.3569,1.3569,1.3569,1,
2005-01-02 11:07:00.0,1.357,1.357,1.3569,1.3569,2,
问题中的format
(参见?strptime
)和colClasses
(参见?read.table
)参数是错误的,其中指定的一些参数是不必要的。
1) 以下较短的代码应该可以。当时它忽略了点之后的部分,但无论如何它都是零所以没关系。如果实际数据中某些行中的点后有非零数字,请参阅上面提到的帮助文件,了解要在 format
.
library(zoo)
read.zoo(text = Lines, header = TRUE, sep = ",", colClasses = c(X = "NULL"))
给予:
open high low close volume
2005-01-02 10:29:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:38:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:51:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 10:52:00 1.3565 1.3565 1.3565 1.3565 1
2005-01-02 10:55:00 1.3568 1.3568 1.3568 1.3568 1
2005-01-02 10:57:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 11:04:00 1.3569 1.3569 1.3569 1.3569 1
2005-01-02 11:07:00 1.3570 1.3570 1.3569 1.3569 2
(我们使用 text = Lines
来保持这个自包含 - Lines
在下面的注释中给出 - 您可以将其替换为问题中的文件名。)
1a) 更短的是下面的。
read.csv.zoo(text = Lines, colClasses = c(X = "NULL"))
2)交替使用,这种两步走的方法特别简单:
DF <- read.csv(text = Lines)[-7]
read.zoo(DF)
3)
library(zoo)
read.zoo(text = Lines, read = function(...) read.csv(...)[-7])
注: 输入为:
Lines <- "
time,open,high,low,close,volume,
2005-01-02 10:29:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:38:00.0,1.356,1.356,1.356,1.356,1,
2005-01-02 10:51:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 10:52:00.0,1.3565,1.3565,1.3565,1.3565,1,
2005-01-02 10:55:00.0,1.3568,1.3568,1.3568,1.3568,1,
2005-01-02 10:57:00.0,1.3567,1.3567,1.3567,1.3567,1,
2005-01-02 11:04:00.0,1.3569,1.3569,1.3569,1.3569,1,
2005-01-02 11:07:00.0,1.357,1.357,1.3569,1.3569,2,"
更新: 最初发布时,此处的一些命令需要 zoo 的开发版本,但现在已发布,因此它们都可以在 CRAN 上与常规 zoo 一起使用。
假设您的数据在一个名为 ‘testFile.csv’
的文件中并且在您的工作目录中,您可以执行以下操作来获取 xts-object
的请求:
testFile <- read.csv("testFile.csv", header=TRUE, colClasses=c("character",rep("numeric",5),NULL))
>as.xts(testFile[,2:6],order.by = as.POSIXct(testFile[,1]))
open high low close volume
2005-01-02 10:29:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:38:00 1.3560 1.3560 1.3560 1.3560 1
2005-01-02 10:51:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 10:52:00 1.3565 1.3565 1.3565 1.3565 1
2005-01-02 10:55:00 1.3568 1.3568 1.3568 1.3568 1
2005-01-02 10:57:00 1.3567 1.3567 1.3567 1.3567 1
2005-01-02 11:04:00 1.3569 1.3569 1.3569 1.3569 1
2005-01-02 11:07:00 1.3570 1.3570 1.3569 1.3569 2