【问题标题】:How do I merge two XTS by date and value in R?如何在 R 中按日期和值合并两个 XTS?
【发布时间】:2020-03-12 19:11:36
【问题描述】:

所以我想根据日期和值合并两个 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】:

    我们可以使用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 转换为数字。
    猜你喜欢
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多