R 使用索引将xts/zoo对象写入csv
当我尝试使用R 使用索引将xts/zoo对象写入csv,r,xts,zoo,R,Xts,Zoo,当我尝试使用write.csv将此对象导出为csv时,不会导出日期索引。如何强制csv输出的第一列作为日期索引 > library(PerformanceAnalytics) > data(managers) > class(managers) [1] "xts" "zoo" > head(managers) HAM1 HAM2 HAM3 HAM4 HAM5 HAM6 EDHEC LS EQ SP500 TR US 10Y TR U
write.csv
将此对象导出为csv时,不会导出日期索引。如何强制csv输出的第一列作为日期索引
> library(PerformanceAnalytics)
> data(managers)
> class(managers)
[1] "xts" "zoo"
> head(managers)
HAM1 HAM2 HAM3 HAM4 HAM5 HAM6 EDHEC LS EQ SP500 TR US 10Y TR US 3m TR
1996-01-31 0.0074 NA 0.0349 0.0222 NA NA NA 0.0340 0.00380 0.00456
1996-02-29 0.0193 NA 0.0351 0.0195 NA NA NA 0.0093 -0.03532 0.00398
1996-03-31 0.0155 NA 0.0258 -0.0098 NA NA NA 0.0096 -0.01057 0.00371
1996-04-30 -0.0091 NA 0.0449 0.0236 NA NA NA 0.0147 -0.01739 0.00428
1996-05-31 0.0076 NA 0.0353 0.0028 NA NA NA 0.0258 -0.00543 0.00443
1996-06-30 -0.0039 NA -0.0303 -0.0019 NA NA NA 0.0038 0.01507 0.00412
row.names:一个逻辑值,指示
“x”将与“x”或字符向量一起写入
要写入的行名称的数目。日期确实显示。以下是一个可复制的示例:
write.csv(t, "t.csv", row.names=TRUE)
更新
zoo
将导致类似的处理:
dfA = read.table(textConnection('row.name HAM1 HAM2 HAM3 HAM4 HAM5 HAM6 "EDHEC LS EQ" SP500 "TR US 10Y" "TR US 3m TR"
1996-01-31 0.0074 NA 0.0349 0.0222 NA NA NA 0.034000 0.00380 0.00456
1996-02-29 0.0193 NA 0.0351 0.0195 NA NA NA 0.009300 -0.03532 0.00398
1996-03-31 0.0155 NA 0.0258 -0.0098 NA NA NA 0.009600 -0.01057 0.00371
1996-04-30 -0.0091 NA 0.0449 0.0236 NA NA NA 0.014700 -0.01739 0.00428
1996-05-31 0.0076 NA 0.0353 0.0028 NA NA NA 0.025800 -0.00543 0.00443
1996-06-30 -0.0039 NA -0.0303 -0.0019 NA NA NA 0.003800 0.01507 0.00412
1996-07-31 -0.0231 NA -0.0337 -0.0446 NA NA NA -0.044200 -0.00100 0.00454
1996-08-31 0.0395 -0.0001 0.0461 0.0351 NA NA NA 0.021100 -0.00448 0.00451
1996-09-30 0.0147 0.1002 0.0653 0.0757 NA NA NA 0.056300 0.02229 0.00470
1996-10-31 0.0288 0.0338 0.0395 -0.0180 NA NA NA 0.027600 0.02869 0.00428'), header = TRUE)
row.names(dfA) = as.Date(dfA$row.name, format = '%Y-%m-%d')
dfA$row.name = NULL
write.csv(dfA, file = 'delete.txt', row.names = TRUE)
“HAM1”、“HAM2”、“HAM3”、“HAM4”、“HAM5”、“HAM6”、“EDHEC.LS.EQ”、“SP500”、“TR.US.10Y”、“TR.US.3m.TR”
“1996-01-31”,0.0074,不适用,0.0349,0.0222,不适用,不适用,不适用,0.034,0.0038,0.00456
“1996-02-29”,0.0193,不适用,0.0351,0.0195,不适用,不适用,不适用,0.0093,-0.03532,0.00398
“1996-03-31”,0.0155,不适用,0.0258,-0.0098,不适用,不适用,不适用,0.0096,-0.01057,0.00371
“1996-04-30”、-0.0091、不适用、0.0449、0.0236、不适用、不适用、不适用、0.0147、-0.01739、0.00428
“1996-05-31”,0.0076,不适用,0.0353,0.0028,不适用,不适用,不适用,0.0258,-0.00543,0.00443
“1996-06-30”,-0.0039,不适用,-0.0303,-0.0019,不适用,不适用,不适用,0.0038,0.01507,0.00412
“1996-07-31”,-0.0231,不适用,-0.0337,-0.0446,不适用,不适用,-0.0442,-0.001,0.00454
“1996-08-31”,0.0395,-1e-04,0.0461,0.0351,不适用,不适用,不适用,0.0211,-0.00448,0.00451
“1996-09-30”,0.0147,0.1002,0.0653,0.0757,不适用,不适用,不适用,0.0563,0.02229,0.0047
“1996-10-31”,0.0288,0.0338,0.0395,-0.018,不适用,不适用,不适用,0.0276,0.02869,0.00428
更新2
结果表明OP有一个
xts
对象,该对象有一个index
属性,而不是rownames
属性,可以通过调用write.zoo
而不是write.csv
(它查找rownames
)写出该属性.在使用write.csv
写入csv文件之前,可以将xts
对象转换为数据帧:
library(zoo)
zooA = as.zoo(dfA, order.by = row.names(dfA))
write.csv(zooA, file = 'delete.txt', row.names = TRUE)
正如@tchakravarty所指出的,应该使用
write.zoo
。以下是对我最有效的方法:
write.csv(as.data.frame(managers), "filename.csv", row.names = TRUE)
此外,如果时间戳的精度为亚秒,则需要类似于
选项(digits.secs=6)
的内容,以便在csv文件中显示小数点。感谢您的帮助,但输出仍然相同。日期索引没有显示。“数据框”的类是什么?@Sven我刚刚更新了我的问题。谢谢已将我的答案更新为处理zoo
。请使用write.zoo
而不是write.csv
。它处理这样一个事实,即对象不是rownames
xts
对象,而是有一个索引
@fgnu,您正好击中了这一点。是的,write.zoo将列标题添加到输出csv文件中!这适用于您的构造,但row.names(managers)返回空值,只有index(managers)返回字符串格式的日期数组。我不认为它是zoo对象,因为在write.csv
中强制zoo对象是自动的。它很可能是一个xts
对象,OP将需要使用write.zoo
。@fgnuwrite.zoo
是这种情况的最佳解决方案。你应该把这个加到你的答案里。
write.csv(as.data.frame(managers), "filename.csv", row.names = TRUE)
write.zoo(tdata, filename, quote = FALSE, sep = ",")