首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归合并xts对象

递归合并xts对象
EN

Stack Overflow用户
提问于 2014-03-27 23:55:02
回答 1查看 258关注 0票数 2

我想要创建和合并许多xts对象。

实际数据来自一个列表(每个时间序列的长度都可能不同),并转换为xts。为了重现性,这个问题类似于以下内容

代码语言:javascript
复制
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对象来启动递归。尽管如此:

代码语言:javascript
复制
xts(1:3, as.Date(1:3))
#            [,1]
# 1970-01-02    1
# 1970-01-03    2
# 1970-01-04    3

当将生成的xts对象与空对象合并时,假设后者具有一个基于时间的索引。

为了避免时间的增加,我可以创建初始的xts项,为它提供显式的虚拟数据。

代码语言:javascript
复制
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对象,您有更聪明的想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 02:37:39

您可以使用do.call将xts对象列表的所有元素合并在一起。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22701622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档