merge.xts 在 for 循环的特定列上

merge.xts on specific columns over a for loop

我下载了很多股票数据,需要与相关指数进行比较。为此,我需要在开始计算日志 returns 之前合并时间序列数据(仅调整收盘价列)。

我已尝试使用 for 循环按以下方式执行此操作:请注意,我已将所有数据下载到单独的环境中,因为它包含许多股票代码的大量数据。

require(quantmod)
e<-new.env()
tickers<-c("GE","BMW.DE","NOVO-B.CO","1COV.DE")
getSymbols("^GSPC",from="2018-01-01")
getSymbols(tickers,from="2019-01-01",env=e)

现在我想获取环境 e 中每个元素的第 6 列(调整后的收盘价)并将 merge.xts(join="inner") 应用于该列以将其与调整后的收盘价结合起来GSPC 的价格。我选择 join="inner" 以确保我只有具有匹配 xts 日期的观测值。

for(ticker in tickers){
x<-get(ticker,envir=e)[,6]
merged_prices<-merge.xts(x,GSPC[,6])
}

当我尝试这样做时出现错误,我也尝试在 运行 for 循环之前创建一个数据框,但我无法让它工作。

提前致谢。

使用环境,您走在正确的轨道上。干得好!

您想从每个交易品种中提取调整后的收盘列并将它们合并到一个 xts 对象中。您的 for 循环走在正确的轨道上,但还有更简单的方法。您可以使用 lapply() 遍历环境中的元素,并使用 Ad() 函数提取调整后的关闭列。然后使用 do.call(merge, ...)lapply().

的输出上调用 merge 函数
merged_prices <- do.call(merge, lapply(e, Ad))

此时您可以合并调整后的 GSPC 收盘价 (merge(Ad(GSPC), merged_prices)),或者您可以将其包含在代码列表中。