2

我需要添加两个不规则的时间序列(涵盖工作日)。

我有两个 xts 系列,用于两种不同的产品 A + B。

产品 B 的数据启动日期比 A 晚。

我想我需要在 B 前面加上日期,以便日期与 A 匹配,但全为零。

这样 sum(A + B) 等于 sum(A) + sum(B)

产品A

2009-05-02  4
2010-02-03  4

产品B

2010-02-03  4

和:

A + B
2010-02-03  8

期望的结果

2009-05-02  4
2010-02-03  8
4

2 回答 2

4

这个怎么样?

library(xts)

首先,我们需要一些样本数据。

proda <- as.xts(matrix(c(4,4), ncol = 1, dimnames = list(c("2009-05-02", "2010-02-03"))))
prodb <- as.xts(matrix(4, ncol = 1, dimnames = list(c("2010-02-03"))))

基于(通用)行名称,merge将链接两个创建的数据集。

ab <- merge(proda, prodb)

我曾经apply对每行的值求和 ( MARGIN = 1) 但rowSums也可以。

data.frame(val = apply(X = ab, MARGIN = 1, FUN = sum, na.rm = TRUE))

结果:

           val
2009-05-02   4
2010-02-03   8
于 2011-06-10T09:26:43.667 回答
4

这是一个单行代码(使用@Roman 的示例数据):

with(merge(proda,prodb,fill=0), proda+prodb)
#            proda
# 2009-05-02     4
# 2010-02-03     8

merge.xtshasall=TRUE作为默认值,该fill=参数允许您指定用于缺失元素的值(默认值为fill=NA)。

的结果merge(proda,prodb,fill=0)是一个包含两列(“proda”、“prodb”)的对象,以及传递给的任何对象中每个索引值的索引值merge.xts

于 2011-06-10T14:02:05.390 回答