【问题标题】:Looping through xts objects obtaining merged output循环通过 xts 对象获得合并输出
【发布时间】:2015-11-18 08:21:57
【问题描述】:

我有几个 xts 对象,我需要用它们来提供函数。 该函数为每个 xts 对象添加一个新列。

我需要帮助来完成以下两件事:

  1. 我想创建一个合并的 xts 对象,其中包含添加到原始 xts 对象的所有列的所有值
  2. 在新合并的 xts 对象中,我需要每列由一个列命名,该列是原始 xts 对象的列的名称。

这是我的意思的一个例子:

require(xts)

A <- xts(rep(1:5), Sys.Date()-5:1)
colnames(A) <- c("AAA")
A$SecondCol <- A[,1] * 10

B <- xts(rep(5:10), Sys.Date()-7:2)
colnames(B) <- c("BBB")
B$SecondCol <- B[,1] * 10

一些任意函数

myFunction = function(x, n=2){
  x.sma <- runMean(x[,2], n)
  if (!is.null(dim(x.sma))) {
  colnames(x.sma) <- colnames(x[,1])
  }
  return(x.sma)
}

我正在寻找的是一种聪明的方法,这样我可以获得一个 xts 对象,该对象具有 AAA 和 BBB 作为列名以及每个对象的 SecondCol 的值:

           AAA BBB
2015-08-17  NA  NA
2015-08-18  NA  55
2015-08-19  NA  65
2015-08-20  15  75
2015-08-21  25  85
2015-08-22  35  95
2015-08-23  45  NA

【问题讨论】:

    标签: r loops for-loop xts zoo


    【解决方案1】:

    我不清楚您的问题,但我可以使用myFunction 和您提供的对象AB 创建带有"AAA""BBB" 列的xts 对象。将所有对象放在一个列表中。在每个元素上调用你的函数,然后在结果列表上调用merge

    R> do.call(merge, lapply(list(A,B), myFunction))
               AAA BBB
    2015-08-18  NA  NA
    2015-08-19  NA  55
    2015-08-20  NA  65
    2015-08-21  15  75
    2015-08-22  25  85
    2015-08-23  35  95
    2015-08-24  45  NA
    

    【讨论】:

    • 这似乎是正确的方法。我刚刚看到一个类似的问题,您在发布此问题后立即回答。我现在没有太多使用列表,并且一开始也没有想到这个选项。再次感谢您的帮助!
    猜你喜欢
    • 2011-09-16
    • 2013-09-04
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2012-08-15
    • 2017-09-16
    • 2014-05-07
    相关资源
    最近更新 更多