如何实现xts对象与.csv文件的往返读写?
解决xts对象往返读写后转换失败的问题
问题出在read.zoo的调用参数上——你没明确指定表头和日期索引列,导致它返回的是数据框而非zoo对象,后续as.xts自然无法正常转换。
修正步骤如下:
- 读取文件时,明确指定表头存在、第一列为日期索引,同时指定日期格式(确保解析正确):
x <- read.zoo("newapple.txt", sep=",", header=TRUE, index.column=1, format="%Y-%m-%d")
这里header=TRUE对应write.zoo写入的表头,index.column=1告诉函数第一列是时间索引,format指定日期格式避免解析错误。
- 接着直接转换为xts对象即可:
x_xts <- as.xts(x) class(x_xts) # 输出应为"xts" "zoo"
- 验证写入操作:
write.zoo(x_xts, file="newerapple.txt", sep=",")
完整修正后的代码:
library(quantmod) from <- "2016-01-01" ## leap year to <- "2017-01-01" symbol <- "AAPL" getSymbols(symbol, from=from, to=to) class(AAPL) write.zoo(AAPL, file="newapple.txt", sep=",") # 修正后的读取代码 x <- read.zoo("newapple.txt", sep=",", header=TRUE, index.column=1, format="%Y-%m-%d") class(x) # 现在输出应为"zoo" x_xts <- as.xts(x) class(x_xts) write.zoo(x_xts, file="newerapple.txt", sep=",") # 正常执行
内容的提问来源于stack exchange,提问作者Ray Tayek
相关产品推荐
相关产品推荐

