将getSymbols结果合并到一个xts对象中

时间:2012-06-24 16:30:23

标签: r quantmod

我有以下代码:

library(quantmod)
tckrs <- c("TLT", "LQD", "HYG", "SPY", "DBC")
NumTckrs  <-  length(tckrs)
getSymbols(tckrs, from="1900-01-01", to=Sys.Date())

# merge to allign the start dates
MainDF <- merge(Ad(TLT), Ad(LQD), Ad(HYG), Ad(SPY), Ad(DBC), all=FALSE)

我不想在最后一行重复股票代码。有谁知道如何做到这一点?

3 个答案:

答案 0 :(得分:4)

将所有数据加载到环境中,然后在每个数据上调用Ad并合并它们。另请注意,getSymbols默认返回xts对象,因此MainDF是xts对象,而不是data.frame。

library(quantmod)
# create new environment
myEnv <- new.env()
# pull all data and load into myEnv
getSymbols("TLT;LQD;HYG;SPY;DBC", env=myEnv)
# eapply calls Ad on each symbol in myEnv and returns a list
# do.call calls merge with each element returned from eapply as an argument
MainXTS <- do.call(merge, c(eapply(myEnv, Ad),all=FALSE))

答案 1 :(得分:3)

这是我的qmao

的一行代码
library(qmao)
p <- makePriceFrame(tckrs, prefer='Adjusted', silent=TRUE)

为方便起见,PFmakePriceFrame的别名。此外,由于默认情况下,该函数将查找并使用“已调整”列(如果存在),您可以省略prefer参数。

p <- PF(tckrs)

您还可以组合使用这些类型的函数

library(FinancialInstrument)
p <- PF(getSymbols(stock(tckrs, currency("USD"))))

另请注意,如果您尚未将符号名称分配给tckrs,则可以从PriceFrame中获取它们。

names(p)
[1] "TLT" "LQD" "HYG" "SPY" "DBC"

如果您没有指定prefer参数,它会查找包含“已调整”,然后是“关闭”,然后是“中间”,然后是“价格”的列。要查看用于创建PriceFrame,看看“prefer”属性

attr(p, "prefer")
[1] "Adjusted"

如果您将数据保存在不同的环境中,PF也可以处理这些问题。

getSymbols(tckrs, env=myEnv)
p <- PF(ls(myEnv), env=myEnv)

答案 2 :(得分:2)

约书亚可能比我的更优雅:

res <- do.call( merge,  lapply(  lapply(tckrs, get) , Ad) )