Frage

Ich muss zwei unregelmäßige Zeitreihen hinzufügen (Deckung von Werktagen).

Ich habe zwei XTS -Serien für zwei verschiedene Produkte A + B.

Produkt B enthält Daten aus einem späteren Start-up-Datum als A.

Ich denke, ich muss B so vorbereiten, dass die Daten mit A übereinstimmen, aber mit allen Nullen.

So dass Summe (a + b) summe (a) + sum (b) entspricht

Produkt a

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

Produkt b

2010-02-03  4

Summe:

A + B
2010-02-03  8

Erwünschtes Ergebnis

2009-05-02  4
2010-02-03  8
War es hilfreich?

Lösung

Wie ist das?

library(xts)

Faust Wir brauchen einige Beispieldaten.

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"))))

Basierend auf (gemeinsamen) Zeilennamen, merge Verknüpft die beiden erstellten Datensätze.

ab <- merge(proda, prodb)

ich benutzte apply Um Werte pro Zeile zu summieren (MARGIN = 1) aber rowSums würde auch funktionieren.

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

Ergebnis:

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

Andere Tipps

Hier ist ein One-Liner (mit Beispieldaten von @Roman):

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

merge.xts hat all=TRUE standardmäßig und die fill= Mit dem Argument können Sie die für fehlenden Elemente zu verwendenden Werte angeben (Standard ist der Standard fill=NA).

Das Ergebnis von merge(proda,prodb,fill=0) ist ein Objekt mit zwei Spalten ("proda", "prodb") und ein Indexwert für jeden Indexwert in einem der übergebenen Objekte merge.xts.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top