使用R写入CSV文件时丢失日期列的问题求助
解决雅虎股票数据保存CSV时日期列丢失的问题
问题原因
getSymbols返回的是xts/zoo格式对象,日期信息存储在行索引中而非普通数据列。直接用as.data.frame()转换时,行索引不会自动转为数据框的列,导致写入CSV后日期丢失。另外你代码里的na.fill(ftse, "extend")没有重新赋值给ftse,这一步填充缺失值的操作实际未生效。
解决方法
方法一:用tidyverse工具将行索引转为日期列
修改代码,在转换数据框时把行索引提取为单独的date列:
library(tidyverse) library(forecast) library(xts) # 确保加载xts包,getSymbols依赖它 # 下载数据并填充缺失值(注意重新赋值给ftse) ftse <- getSymbols('^FTSE', auto.assign=FALSE, from = '2013-01-01', src= 'yahoo') ftse <- na.fill(ftse, "extend") # 转换为数据框,并将行索引转为date列 ftse_df <- ftse %>% as.data.frame() %>% rownames_to_column(var = "date") # 修改列名(现在包含date列) colnames(ftse_df) <- c("date", "open", "high", "low", "close", "volume", "adjusted") # 写入CSV write_csv(ftse_df, "C:/Users/xxx/ftse.csv")
方法二:直接用xts的write.zoo函数保存
xts提供了write.zoo函数,可直接将带索引的对象写入CSV,自动保留日期列:
library(tidyverse) library(forecast) library(xts) ftse <- getSymbols('^FTSE', auto.assign=FALSE, from = '2013-01-01', src= 'yahoo') ftse <- na.fill(ftse, "extend") # 直接写入CSV,指定列名(第一列为date) write.zoo(ftse, file = "C:/Users/xxx/ftse.csv", sep = ",", col.names = c("date", "open", "high", "low", "close", "volume", "adjusted"))
验证结果
打开生成的CSV文件,第一列会显示对应的交易日期,其他行情数据也能正常保留。
内容的提问来源于stack exchange,提问作者Kevin A
相关产品推荐
相关产品推荐

