Sí se puede, y de la manera más fácil puede ser a través 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>
y aquí es un ejemplo completo:
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
Así que ahora que tenemos nuestros datos, es sólo es cuestión de escribirlo:
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>
edición el 25 ene 2012 Uso row.names=FALSE
, no TRUE
para suprimir nombres de fila doble. Y como row.names=FALSE
es el valor predeterminado, elimínelo de la llamada.
muchas gracias a Dirk, que es muy útil. – user1155299
Dirk, he estado tratando de averiguar por unas horas cómo deshacerme de la columna de fecha duplicada en mi .csv, pero hasta ahora no he tenido suerte. Además, cuando ejecuto '> xmat [, 1] A 2012-01-21 -1.4232098 2012-01-22 0.1456240 2012-01-23 -0.6625430 2012-01-24 -0.3947322 2012-01-25 0.5433947', regresa la fecha de nuevo, mientras que solo quiero obtener los valores en A. es posible. – user1155299
Lo sentimos, queremos 'row.names = FALSE', que es el valor predeterminado. He editado mi publicación en consecuencia. –