Вопрос

Мне нужно добавить две нерегулярные временные ряды (охватывающие рабочие дни).

У меня есть две серии 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top