Domanda
Ho bisogno di aggiungere due serie temporali irregolari (che coprono giorni lavorativi).
Ho due serie XTS per due diversi prodotti A + B.
prodotto B ha dati da una startup-data successiva al A.
Credo di aver bisogno di anteporre B in modo che le date partite A, ma con tutti zeri.
Tale tale somma (A + B) è uguale a sum (A) + somma (B)
prodotto A
2009-05-02 4
2010-02-03 4
prodotto B
2010-02-03 4
Somma:
A + B
2010-02-03 8
risultato desiderato
2009-05-02 4
2010-02-03 8
Soluzione
Come è questo?
library(xts)
Pugno abbiamo bisogno di alcuni dati di esempio.
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"))))
In base a (comuni) nomi di riga, merge
collegherà le due serie di dati creati.
ab <- merge(proda, prodb)
Ho usato apply
a valori importo per ogni riga (MARGIN = 1
) ma rowSums
funzionerebbe anche.
data.frame(val = apply(X = ab, MARGIN = 1, FUN = sum, na.rm = TRUE))
Risultato:
val
2009-05-02 4
2010-02-03 8
Altri suggerimenti
Ecco un one-liner (utilizzando @ esempio i dati di Roman):
with(merge(proda,prodb,fill=0), proda+prodb)
# proda
# 2009-05-02 4
# 2010-02-03 8
merge.xts
ha all=TRUE
come predefinito e l'argomento fill=
consente di specificare i valori da utilizzare per gli elementi mancanti (di default è fill=NA
).
Il risultato di merge(proda,prodb,fill=0)
è un oggetto con due colonne ( "Proda", "prodb") e un valore di indice per ogni valore dell'indice in qualsiasi oggetti passati a merge.xts
.