如何在R中按日期和值合并两个XT?

如何在R中按日期和值合并两个XT?,r,merge,xts,R,Merge,Xts,所以我想根据日期和值合并两个XT。假设其中一个是这样的 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 第二个XTS是这样的 d <- c("b","a","c","b") e <- c(10,20,10,30) y

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

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
第二个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     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

我们可以使用
match
创建一个矩阵,该矩阵的行/列索引是
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"
图书馆(动物园)

y$val我们可以使用
match
创建一个矩阵,其中行/列索引指向
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"
图书馆(动物园)

等等,这不对。输出应该是y而不是x。@PashaS是,更新了答案。引号就在这里,因为里面有数字和字符,所以所有的东西都被强制转换成字符。太好了。谢谢不管怎样,我能把报价弄下来吗?我需要用“e”值平均“val”列。如果删除
d
列,则可以将
y
转换为数字。请稍候,这不对。输出应该是y而不是x。@PashaS是,更新了答案。引号就在这里,因为里面有数字和字符,所以所有的东西都被强制转换成字符。太好了。谢谢不管怎样,我能把报价弄下来吗?我需要用“e”值平均“val”列。如果删除
d
列,则可以将
y
转换为数值。
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"