Из-за QuantMod обычно xts
с символом, встроенным во все имена столбцов. (например, «SPY.Open», «SPY.High» и т. д.). Итак, вот альтернатива as.data.table.xts
Яна, которая помещает символ в отдельный столбец, что более естественно в data.table
с (поскольку вы, вероятно, собираетесь связать их несколько перед выполнением любого анализа).
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