R xts and data.table

后端 未结 2 1651
执笔经年
执笔经年 2020-12-28 09:24

I can convert a data.table to an xts object just as I do with a data.frame:

> df = data.frame(x = c(\"a\", \"b\", \"c\", \"d\"), v = rnorm(4))
> dt = d         


        
2条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-28 09:57

    Because of quantmod, it is common to have an xts with the symbol embedded in all the column names. (e.g. "SPY.Open", "SPY.High", etc.). So, here is an alternative to Jan's as.data.table.xts that puts the symbol in a separate column, which is more natural in data.tables (since you're probably going to rbind a bunch of these before doing any analysis).

    as.data.table.xts <- function(x, ...) {
      cn <- colnames(x)
      sscn <- strsplit(cn, "\\.")  
      indexClass(x) <- c('POSIXct', 'POSIXt') #coerce index to POSIXct
      DT <- data.table(time=index(x), coredata(x))
      #DT <- data.table(IDateTime(index(x)), coredata(x))
    
      ## If there is a Symbol embedded in the colnames, strip it out and make it a 
      ## column
      if (all(sapply(sscn, "[", 1) == sscn[[1]][1])) {
        Symbol <- sscn[[1]][1]
        setnames(DT, names(DT)[-1], sub(paste0(Symbol, "."), "", cn))
        DT <- DT[, Symbol:=Symbol]
        setkey(DT, Symbol, time)[]
      } else {
        setkey(DT, time)[]
      }
    }
    

    library(quantmod)
    getSymbols("SPY")
    as.data.table(SPY)
                time   Open   High    Low  Close   Volume Adjusted Symbol
       1: 2007-01-03 142.25 142.86 140.57 141.37 94807600   120.36    SPY
       2: 2007-01-04 141.23 142.05 140.61 141.67 69620600   120.61    SPY
       3: 2007-01-05 141.33 141.40 140.38 140.54 76645300   119.65    SPY
       4: 2007-01-08 140.82 141.41 140.25 141.19 71655000   120.20    SPY
       5: 2007-01-09 141.31 141.60 140.40 141.07 75680100   120.10    SPY
      ---                                                                
    1993: 2014-12-01 206.30 206.60 205.38 205.64 12670100   205.64    SPY
    1994: 2014-12-02 205.81 207.34 205.78 207.09 72105500   207.09    SPY
    1995: 2014-12-03 207.30 208.15 207.10 207.89 69450000   207.89    SPY
    1996: 2014-12-04 207.54 208.27 206.70 207.66 89928200   207.66    SPY
    1997: 2014-12-05 207.87 208.47 207.55 208.00 85031000   208.00    SPY
    

提交回复
热议问题