我想创建和合并一些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对象吗?
答案 0 :(得分: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)