我有以下代码:
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)
我不想在最后一行重复股票代码。有谁知道如何做到这一点?
答案 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)
为方便起见,PF
是makePriceFrame
的别名。此外,由于默认情况下,该函数将查找并使用“已调整”列(如果存在),您可以省略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) )