Pregunta
Necesito agregar dos irregular de la serie de tiempo (que abarca los días hábiles).
Tengo dos xts serie de dos productos diferentes a + B.
El producto B tiene datos desde un inicio posterior, la fecha de A.
Yo creo que es necesario anteponer B, por lo que las fechas de los partidos, pero con todos los ceros.
Tales que la suma(a + B) es igual a la suma(A) + sum(B)
Producto De Un
2009-05-02 4
2010-02-03 4
Producto B
2010-02-03 4
Suma:
A + B
2010-02-03 8
Resultado deseado
2009-05-02 4
2010-02-03 8
Solución
¿Cómo es esto?
library(xts)
Puño necesitamos algunos datos de muestra.
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"))))
Basado en nombres de fila (comunes), merge
vinculará los dos conjuntos de datos creados.
ab <- merge(proda, prodb)
solía apply
a sumar valores por cada fila (MARGIN = 1
) pero rowSums
también funcionaría.
data.frame(val = apply(X = ab, MARGIN = 1, FUN = sum, na.rm = TRUE))
Resultado:
val
2009-05-02 4
2010-02-03 8
Otros consejos
He aquí un one-liner (con @Romano de datos de ejemplo):
with(merge(proda,prodb,fill=0), proda+prodb)
# proda
# 2009-05-02 4
# 2010-02-03 8
merge.xts
ha all=TRUE
un defecto y la fill=
argumento le permite especificar los valores para ser usados por falta de elementos (por defecto es fill=NA
).
El resultado de merge(proda,prodb,fill=0)
es un objeto con dos columnas ("proda","prodb") y un valor del índice para cada valor del índice en cualquiera de los objetos que pasan a merge.xts
.