2014-03-27 134 views
2

我想創建和合並若干XTS的對象合併XTS對象遞歸

的實際數據來自一個列表(其中,每個時間序列長度可以變化)和轉換爲XTS。 對於重複性的緣故問題是類似於以下

x=xts() 
for(i in 1:3){ 
    n=round(runif(1, 2, 5)) 
    x=merge(x, x=xts(rnorm(n-1), as.Date(2:n))) 
} 
x 

#      x  x.1  x.2 
# 1970-01-03 01:00:00 0.3130791 0.7817730 0.06623756 
# 1970-01-04 01:00:00  NA 0.4827522 0.94823558 
# 1970-01-05 01:00:00  NA 0.2411705   NA 

正如你看到的,我需要一個初始空XTS對象開始遞歸。儘管如此:

xts(1:3, as.Date(1:3)) 
#   [,1] 
# 1970-01-02 1 
# 1970-01-03 2 
# 1970-01-04 3 

合併生成的xts對象與空的時,後者假定有一個基於時間的索引。

爲了避免添加時間,我可以創建初始xts項目,給它顯式的虛擬數據。

x= xts(1, as.Date(1)) 
for(i in 1:3){ 
    n=round(runif(1, 2, 5)) 
    x=merge(x, x=xts(rnorm(n-1), as.Date(2:n))) 
} 
x=x[,-1] 
if(all(is.na(x[1,]))) x=x[-1,] 
x 
#     x.1   x.2  x.3 
# 1970-01-03 -0.5098130 -0.57121953 -1.259878 
# 1970-01-04 -0.9984952 -0.26467168 -2.413181 
# 1970-01-05 3.0207324 -1.06862153  NA 
# 1970-01-06   NA 0.05542239  NA 

這工作,但我必須添加額外的代碼從虛擬數據清洗和最有可能的,超越虛擬列,您還可以獲得一個額外的排爲假日期。

你有更聰明的想法合併遞歸的xts對象嗎?

回答

1

您可以使用do.call合併xts對象列表中的所有元素。

require(xts) 
#lets create list of xts objects. 
LL <- lapply(1:4, FUN = function(i) xts(1:6, as.Date(1:6) + i)) 

#merge them all together 
merged.xts <- do.call("merge", LL) 
+0

並且快於 – antonio