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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top