2015-08-24 65 views
0

我有幾個xts對象,我需要提供一個函數。 該函數爲每個xts對象添加一個新列。循環訪問xts對象獲取合併輸出

我需要幫助achiving以下兩件事情:

  1. 我想創建一個包含所有被添加到原來的XTS列對象的所有值
  2. 在新合併的合併XTS對象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 

回答

2

您的問題對我不明確,但我可以使用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 
+0

這似乎是正確的方法。我剛剛發佈了這個問題之後,剛剛看到類似的問題。我現在沒有使用過多的列表,並且首先沒有想到這個選項。再次感謝你的幫助! – Pat