Bereiten Sie unregelmäßige XTs mit Nullen vor
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
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
.