如何按R中的日期和值合并两个XTS?

问题描述 投票:1回答:1

所以我想根据日期和值合并两个XTS。假设其中之一是这样。

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

所以我们得到了这个...

           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

第二个XTS就是这样...

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

所以我们得到了这个(也很希望摆脱引号)...

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

我想得到这个结果...

           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
r merge xts
1个回答
1
投票

我们可以使用match创建一个行/列索引为x的子集的矩阵。

library(zoo)
x$val <- coredata(x)[cbind(match(index(y), index(x)), match(y$d, names(x)))]

x
#           a b  c val
#2015-01-02 1 2  3   2
#2015-01-05 2 4  6   2
#2015-01-06 3 6  9   6
#2015-01-07 4 8 12   6
© www.soinside.com 2019 - 2024. All rights reserved.