2

我有一个每日柱的 csv 文件,只有两行:

"datestamp","Open","High","Low","Close","Volume"
"2012-07-02",79.862,79.9795,79.313,79.509,48455

(该文件是一个 xts 被转换为 data.frame 然后传递给write.csv

我用这个加载它:

z=read.zoo(file='tmp.csv',sep=',',header=T,format = "%Y-%m-%d")

如图所示,这很好print(z)

           Open   High    Low    Close  Volume
2012-07-02 79.862 79.9795 79.313 79.509 48455 

但随后as.xts(z)给出:coredata.xts(x) 中的错误:当前不支持的数据类型

这是str(z)输出:

‘zoo’ series from 2012-07-02 to 2012-07-02
  Data:List of 5
 $ : num 79.9
 $ : num 80
 $ : num 79.3
 $ : num 79.5
 $ : int 48455
 - attr(*, "dim")= int [1:2] 1 5
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:5] "Open" "High" "Low" "Close" ...
  Index:  Date[1:1], format: "2012-07-02"

到目前为止,我已经确认不是 4 列num和 1 列是int,因为即使在删除 Volume 列后我仍然会收到错误消息。但是,那么,该错误消息可能在谈论什么?

4

1 回答 1

2

正如塞巴斯蒂安在评论中指出的那样,问题出在单行上。具体来说,当 read.zoo 读取单行时 coredata 是一个列表,但是当有 2 行以上时,coredata 是一个列表(矩阵?)。

我用以下内容替换了对 read.zoo 的调用,无论是 1 行还是 2 行以上,它都可以正常工作:

d=read.table(fname,sep=',',header=T)
x=as.xts(subset(d,select=-datestamp),order.by=as.Date(d$datestamp))
于 2012-07-19T07:49:12.103 回答