导入由日期索引的csv的问题

时间:2017-10-22 01:46:12

标签: r csv xts

我正在尝试导入带有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,

2 个答案:

答案 0 :(得分:1)

问题中的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,"

更新:在最初发布时,这里的一些命令需要动物园的开发版本,但现在已经出来了所以它们都可以在CRAN上使用常规动物园。

答案 1 :(得分:1)

假设您的数据位于名为‘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