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

问题描述 投票:1回答:1

我已经下载了大量股票数据,需要将其与相关索引进行比较。为此,我需要先合并时间序列数据(仅调整后的收盘价列),然后再开始计算日志返回值。

我已尝试通过以下方式通过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循环之前创建数据帧,但无法正常工作。

提前感谢。

for-loop merge xts quantmod
1个回答
0
投票

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

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

merged_prices <- do.call(merge, lapply(e, Ad))

您可以在此时合并GSPC的调整后的收盘价(merge(Ad(GSPC), merged_prices),也可以将其包括在股票报价清单中。

© www.soinside.com 2019 - 2024. All rights reserved.