For loop 通过for循环在特定列上合并.xts

For loop 通过for循环在特定列上合并.xts,for-loop,merge,xts,quantmod,For Loop,Merge,Xts,Quantmod,我下载了很多股票数据,需要将其与相关指数进行比较。要做到这一点,我需要在开始计算日志收益之前合并时间序列数据(仅限调整后的收盘价列) 我用for循环尝试了以下方法:请注意,我已将所有数据下载到单独的环境中,因为这是许多股票行情的大量数据 require(quantmod) e<-new.env() tickers<-c("GE","BMW.DE","NOVO-B.CO","1COV.DE") getSymbols("^GSPC",from="2018-01-01") getSymbo

我下载了很多股票数据,需要将其与相关指数进行比较。要做到这一点,我需要在开始计算日志收益之前合并时间序列数据(仅限调整后的收盘价列)

我用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)
require(quantmod)

e通过使用环境,您走上了正确的道路。干得好

您希望从每个符号中提取调整后的关闭列,并将它们合并到一个xts对象中。您的
for
循环走在正确的轨道上,但是有一种更简单的方法。可以使用
lappy()
在环境中循环元素,并使用
Ad()
函数提取调整后的关闭列。然后使用
do.call(merge,…)
lappy()的输出调用
merge
函数


merged\u prices通过使用环境,您走上了正确的道路。干得好

您希望从每个符号中提取调整后的关闭列,并将它们合并到一个xts对象中。您的
for
循环走在正确的轨道上,但是有一种更简单的方法。可以使用
lappy()
在环境中循环元素,并使用
Ad()
函数提取调整后的关闭列。然后使用
do.call(merge,…)
lappy()的输出调用
merge
函数


merged_prices你好,Joushua,非常感谢。这很有效。不过有一个问题,因为我对EUROSTOXX600和S&P500的所有600只股票都这么做了,所以当我像你上面建议的那样合并xts对象时,我最终得到了很多NAs。我认为在合并对象上使用na.locf(fromLast=TRUE)可能是一个想法,或者使用merge.xts(join=“internal”),但是如果一只股票几乎没有观察到,我就冒着没有很多观察到的风险。你怎么认为?再次感谢大家,高度赞赏在不了解更多关于您正在进行的分析的情况下,很难说您应该对NA做些什么。例如,如果要使用价格数据来计算指标(例如移动平均数),使用LOCF就可以了。但是如果你在做基于协方差的投资组合优化,你应该从价格数据中省略NA,然后计算回报,然后是协方差矩阵。这是一个事件研究,所以我想省略NAs是最好的选择。再次非常感谢,非常感谢。我将更加熟悉do.call()函数:)嗨,Joushua,非常感谢。这很有效。不过有一个问题,因为我对EUROSTOXX600和S&P500的所有600只股票都这么做了,所以当我像你上面建议的那样合并xts对象时,我最终得到了很多NAs。我认为在合并对象上使用na.locf(fromLast=TRUE)可能是一个想法,或者使用merge.xts(join=“internal”),但是如果一只股票几乎没有观察到,我就冒着没有很多观察到的风险。你怎么认为?再次感谢大家,高度赞赏在不了解更多关于您正在进行的分析的情况下,很难说您应该对NA做些什么。例如,如果要使用价格数据来计算指标(例如移动平均数),使用LOCF就可以了。但是如果你在做基于协方差的投资组合优化,你应该从价格数据中省略NA,然后计算回报,然后是协方差矩阵。这是一个事件研究,所以我想省略NAs是最好的选择。再次非常感谢,非常感谢。我将更加熟悉do.call()函数:)
for(ticker in tickers){
x<-get(ticker,envir=e)[,6]
merged_prices<-merge.xts(x,GSPC[,6])
}