我有一个xts对象,第一列是日期时间,后面是OHLC。当我输入
>test
它打印正确的输出如下:
2010-09-08 15:13:00 115 115 110 115
2010-09-08 15:14:00 120 125 115 125
然而,当我尝试write.csv(test,“test.csv”)时 它只写OHLC - 为什么。我用什么命令来写日期时间
这就是str(test)的样子:
An ‘xts’ object from 2010-06-30 15:47:00 to 2010-09-08 15:14:00 containing:
Data: num [1:21757, 1:4] 215 220 205 195 185 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:4] "y.Open" "y.High" "y.Low" "y.Close"
Indexed by objects of class: [POSIXlt,POSIXt] TZ:
xts Attributes:
NULL
答案 0 :(得分:18)
是的,你可以,最简单的方法可能是write.zoo
:
R> write.zoo
function (x, file = "", index.name = "Index", row.names = FALSE,
col.names = NULL, ...)
{
if (is.null(col.names))
col.names <- !is.null(colnames(x))
dx <- as.data.frame(x)
stopifnot(all(names(dx) != index.name))
dx[[index.name]] <- index(x)
dx <- dx[, c(ncol(dx), 1:(ncol(dx) - 1))]
write.table(dx, file = file, row.names = row.names, col.names = col.names,
...)
}
<environment: namespace:zoo>
R>
这是一个完整的例子:
R> mat <- matrix(rnorm(20),5,4, dimnames=list(NULL, LETTERS[1:4]))
R> mat
A B C D
[1,] -2.5304768 0.5454043 0.754670 0.330617
[2,] -0.5199045 0.3943289 -1.271524 -2.243113
[3,] -0.0996277 -0.0513063 -0.846310 -0.140727
[4,] 0.3819981 0.5230709 1.131108 2.398311
[5,] 1.4366976 -1.7750772 0.193936 1.047754
R> xmat <- xts(mat, order.by=Sys.Date() + seq(-4,0))
R> xmat
A B C D
2012-01-19 -2.5304768 0.5454043 0.754670 0.330617
2012-01-20 -0.5199045 0.3943289 -1.271524 -2.243113
2012-01-21 -0.0996277 -0.0513063 -0.846310 -0.140727
2012-01-22 0.3819981 0.5230709 1.131108 2.398311
2012-01-23 1.4366976 -1.7750772 0.193936 1.047754
现在我们有了数据,只需要写一下:
R> write.zoo(xmat, file="/tmp/demo.csv", sep=",")
R> system("cat /tmp/demo.csv")
"Index","A","B","C","D"
2012-01-19,-2.53047680387774,0.545404313269755,0.754669841541681,0.330616876246245
2012-01-20,-0.519904544868541,0.394328857686792,-1.27152367237311,-2.24311276135881
2012-01-21,-0.0996276931028331,-0.0513062656752562,-0.846309564748021,-0.14072731914499
2012-01-22,0.381998053276389,0.523070920853495,1.13110826400249,2.39831100812159
2012-01-23,1.43669757366164,-1.77507724264279,0.193935657150967,1.04775355172344
R>
2012年1月25日编辑使用row.names=FALSE
,而非TRUE
来禁止双行名称。由于row.names=FALSE
是默认设置,因此请将其从通话中删除。
答案 1 :(得分:9)
最简单的方法是在write.csv
电话中首先转换为数据框。
即
write.csv(as.data.frame(test),"test.csv")
你已经完成了。
如果你在Excel中打开它,你现在应该在A列中有你的日期/时间索引,你的OHLC对象在B列:E
答案 2 :(得分:0)
为什么不使用saveSymbols()?
取消@Dirk Eddelbuettel在答案中提供的矩阵
xmat <- xts(mat, order.by=Sys.Date() + seq(-4,0))
saveSymbols(xmat, file.path="/tmp/xmat.csv")