【问题标题】:How to add title to column of the xts time series如何为 xts 时间序列的列添加标题
【发布时间】:2016-01-06 03:18:47
【问题描述】:

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

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

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

           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 的标题。

【问题讨论】:

标签: r csv xts zoo quantmod


【解决方案1】:

使用 write.zoo 而不是 write.csv 将 xts 对象写入 csv 文件。如果您希望索引列标题为“日期”而不是“索引”(默认值),请设置 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 对象(您可以通过 as.xts 将其转换为 xts)。

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

【讨论】:

    【解决方案2】:

    引用Joshua Ulrich, "getSymbols 默认不返回 data.frame;它返回一个 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
    

    【讨论】:

    • 如何将此代码实现到大量列(>10)。我试过这样cln&lt;-ncol(AAPL) AAPL &lt;- AAPL[,c(cln+1, 1:cln)],但它的给出日期是数字
    • 不正确。应该是AAPL &lt;- AAPL[, c(cln, 1:(cln-1))]
    【解决方案3】:

    你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      相关资源
      最近更新 更多