Entonces quiero fusionar dos XTS según la fecha y el valor. Supongamos que uno de ellos es así.

a <- c(1,2,3,4)
b <- c(2,4,6,8)
c <- c(3,6,9,12)
x <- xts(cbind(a,b,c),order.by=as.Date(c("2015-01-02","2015-01-05","2015-01-06","2015-01-07")))
x

Entonces obtenemos esto ...

           a b  c
2015-01-02 1 2  3
2015-01-05 2 4  6
2015-01-06 3 6  9
2015-01-07 4 8 12

El segundo XTS es así ...

d <- c("b","a","c","b")
e <- c(10,20,10,30)
y <- xts(cbind(d,e),order.by=as.Date(c("2015-01-02","2015-01-05","2015-01-05","2015-01-06")))
y

Entonces obtenemos esto (sería bueno deshacernos de las comillas también) ...

           d   e   
2015-01-02 "b" "10"
2015-01-05 "a" "20"
2015-01-05 "c" "10"
2015-01-06 "b" "30"

Me gustaría obtener este resultado ...

           d   e     val
2015-01-02 "b" "10"  2
2015-01-05 "a" "20"  2
2015-01-05 "c" "10"  6
2015-01-06 "b" "30"  6
0
Pasha S 17 nov. 2019 a las 06:24

1 respuesta

La mejor respuesta

Podemos usar match para crear una matriz con un índice de fila / columna a un subconjunto de x.

library(zoo)
y$val <- as.character(coredata(x)[cbind(match(index(y), index(x)), 
                                        match(y$d, names(x)))])
y
#            d   e    val
#2015-01-02 "b" "10" "2"
#2015-01-05 "a" "20" "2"
#2015-01-05 "c" "10" "6"
#2015-01-06 "b" "30" "6"
2
Ronak Shah 17 nov. 2019 a las 04:03