【问题标题】:merge.xts on specific columns over a for loop通过 for 循环在特定列上合并.xts
【发布时间】:2020-09-22 05:21:59
【问题描述】:

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

我已尝试使用 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】:

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

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

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

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

    【讨论】:

    • 嗨,Joushua,非常感谢。这行得通。但是有一个问题,因为我对 EUROSTOXX600 和 S&P500 的所有 600 只股票都这样做,所以当我按照你上面的建议合并 xts 对象时,我最终得到了很多 NA。我在想在合并对象上使用 na.locf(fromLast=TRUE) 可能是一个想法或使用 merge.xts(join="inner"),但是如果一只股票,我冒着没有很多观察的风险几乎没有观察到。你怎么看?再次感谢,非常感谢
    • 如果不了解您正在进行的分析,很难说您应该对 NA 做些什么。例如,如果您要使用价格数据来计算指标(例如移动平均线),则使用 LOCF 会很好。但是如果你在做基于协方差的投资组合优化,你应该从价格数据中省略 NA,然后计算收益,然后是协方差矩阵。
    • 嗯,这是一项事件研究,所以我想省略 NA 是最好的选择。再次感谢一堆,非常感谢。我会更加熟悉 do.call() 函数:)
    猜你喜欢
    • 2015-11-18
    • 2013-09-04
    • 1970-01-01
    • 2021-02-11
    • 2019-08-19
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多