Có bạn có thể, và cách dễ nhất có thể thông qua 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>
và đây là một ví dụ hoàn chỉnh:
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
Vì vậy, bây giờ mà chúng tôi có dữ liệu của chúng tôi, nó là chỉ là vấn đề của văn bản đó:
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>
Edit trên 25 tháng 1 năm 2012 Sử dụng row.names=FALSE
, không TRUE
để ngăn chặn tên hàng tăng gấp đôi. Và như row.names=FALSE
là mặc định, hãy xóa nó khỏi cuộc gọi.
cảm ơn rất nhiều Dirk, đó là rất hữu ích. – user1155299
Dirk, tôi đã cố gắng tìm ra một vài giờ bây giờ là làm thế nào để thoát khỏi cột ngày trùng lặp trong .csv của tôi, nhưng không có may mắn cho đến nay. Ngoài ra, khi tôi chạy '> 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', nó trả về ngày một lần nữa trong khi tôi chỉ muốn nhận được các giá trị trong A. là có thể. – user1155299
Xin lỗi, chúng tôi muốn 'row.names = FALSE' là mặc định. Tôi đã chỉnh sửa bài đăng của mình cho phù hợp. –