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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top