Вопрос
Мне нужно добавить две нерегулярные временные ряды (охватывающие рабочие дни).
У меня есть две серии XTS для двух разных продуктов A + B.
Продукт B имеет данные из более поздней даты запуска, чем A.
Я думаю, что мне нужно придумать B, чтобы даты соответствовали A, но со всеми нулями.
Такая сумма (a + b) равна сумме (a) + сумма (b)
Продукт а
2009-05-02 4
2010-02-03 4
Продукт б
2010-02-03 4
Сумма:
A + B
2010-02-03 8
Желаемый результат
2009-05-02 4
2010-02-03 8
Решение
Как это?
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
Другие советы
Вот однострочная (используя примеры данных @Roman):
with(merge(proda,prodb,fill=0), proda+prodb)
# proda
# 2009-05-02 4
# 2010-02-03 8
merge.xts
имеет all=TRUE
как дефолт и fill=
аргумент позволяет указать значения, которые будут использоваться для пропущенных элементов (по умолчанию fill=NA
).
Результат merge(proda,prodb,fill=0)
является объектом с двумя столбцами («proda», «prodb») и значением индекса для каждого значения индекса в любом из объектов, переданных merge.xts
.