如何将标题添加到 xts 时间序列的列

How to add title to column of the xts time series

我想使用 quantmod 下载一些股票详细信息,并已使用 write.csv 成功保存文件:

write.csv(df,file="AAPL.csv")

问题是 csv 文件中的日期没有 header。

           AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2014-10-01    100.59    100.69    98.70      99.18    51491300      97.09741
2014-10-02     99.27    100.22    98.04      99.90    47757800      97.80230
2014-10-03     99.44    100.21    99.04      99.62    43469600      97.52818
2014-10-06     99.95    100.65    99.42      99.62    37051200      97.52818
2014-10-07     99.43    100.12    98.73      98.75    42094200      96.67644
2014-10-08     98.76    101.11    98.31     100.80    57404700      98.68340
2014-10-09    101.54    102.38   100.61     101.02    77376500      98.89877

我想要这样的东西

  Date      AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2014-10-01    100.59    100.69    98.70      99.18    51491300      97.09741
2014-10-02     99.27    100.22    98.04      99.90    47757800      97.80230
2014-10-03     99.44    100.21    99.04      99.62    43469600      97.52818

我试过了

colnames(df)[1] <- "Date"

但它更改了 AAPL.Open 的标题。

你可以这样做:

df$Date <- row.names(df)
row.names(df) <- NULL

引用 , "getSymbols 默认情况下 return 不是 data.frame;它 return 是 xts 对象。xts 对象没有行名称。它们有一个索引属性,您可以使用 index 函数访问该属性。"

那么你需要:

library(quantmod)
getSymbols("AAPL")
row.names(AAPL)
# NULL
AAPL <- as.data.frame(AAPL)
AAPL$Date <- row.names(AAPL)
# Move last column to first position
# AAPL <- AAPL[,c(7, 1:6)]
cln <- ncol(AAPL) # 7
AAPL <- AAPL[, c(cln, 1:(cln-1))]
row.names(AAPL) <- NULL
head(AAPL)
#         Date AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
# 1 2007-01-03     86.29     86.58    81.90      83.80   309579900      11.14677
# 2 2007-01-04     84.05     85.95    83.82      85.66   211815100      11.39418
# 3 2007-01-05     85.77     86.20    84.40      85.05   208685400      11.31304
# 4 2007-01-08     85.96     86.53    85.28      85.47   199276700      11.36891
# 5 2007-01-09     86.45     92.98    85.15      92.57   837324600      12.31332
# 6 2007-01-10     94.75     97.80    93.45      97.00   738220000      12.90259

使用 write.zoo 而不是 write.csv 将 xts objects 写入 csv 文件。如果希望索引列 header 为 "Date" 而不是 "Index"(默认值),请设置 index.name = "Date"

例如:

require(quantmod)
getSymbols("AAPL")
write.zoo(AAPL, file="AAPL.csv", sep=",", index.name="Date")
readLines("AAPL.csv", n=3)
# [1] "\"Date\",\"AAPL.Open\",\"AAPL.High\",\"AAPL.Low\",\"AAPL.Close\",\"AAPL.Volume\",\"AAPL.Adjusted\""
# [2] "2007-01-03,86.289999,86.579999,81.899999,83.800002,309579900,11.146771"                            
# [3] "2007-01-04,84.050001,85.949998,83.820003,85.659998,211815100,11.394181"

然后您可以使用 read.zoo 将这些类型的文件读入 zoo object(您可以通过 as.xts 将其转换为 xts)。

我还建议您使用 saveRDSsave 以二进制格式保存文件,除非您绝对必须将它们保存为纯文本。