【问题标题】:R xts how to union two xts/zoo with overlapped time scope and a main and a secondayR xts 如何合并两个具有重叠时间范围的 xts/zoo 以及一个主要和一个次要
【发布时间】:2019-02-22 18:33:50
【问题描述】:

我有两个 xts/zoo,一个是主要的,另一个是次要的。我想按行合并它们。两个 xts/zoo 可能具有不同值的重复索引。 如果索引重复,则应保留主要行。 比如

mainXts
2019-02-26    4
2019-02-27   90
2019-02-28    6
2019-03-01    7
2019-03-02    8
2019-03-03    9
2019-03-04   10

secondaryXts
2019-02-23    1
2019-02-24    2
2019-02-25    3
2019-02-26    4
2019-02-27    5
2019-02-28    6

结果应该是

2019-02-23    1
2019-02-24    2
2019-02-25    3
2019-02-26    4
2019-02-27   90
2019-02-28    6
2019-03-01    7
2019-03-02    8
2019-03-03    9
2019-03-04   10

有没有简单的方法来做联合? 谢谢

【问题讨论】:

    标签: r xts


    【解决方案1】:

    我不确定您是否会称其为简单,但这可以解决问题。首先将两个 xts 对象与主对象合并,检查 out 对象内的列名并在 ifelse 中使用它们。在 ifelse 中,将 NA 替换为第二列中的值,然后我们删除您不需要的列。

    out <- merge(mainxts, secondxts)
    out$mainxts <- ifelse(is.na(out$mainxts), out$secondxts, out$mainxts)
    out$secondxts <- NULL
    
    out
               mainxts
    2019-02-23       1
    2019-02-24       2
    2019-02-25       3
    2019-02-26       4
    2019-02-27      90
    2019-02-28       6
    2019-03-01       7
    2019-03-02       8
    2019-03-03       9
    2019-03-04      10
    

    数据:

    mainxts <- structure(c(4L, 90L, 6L, 7L, 8L, 9L, 10L), .Dim = c(7L, 1L), index = structure(c(1551139200, 
    1551225600, 1551312000, 1551398400, 1551484800, 1551571200, 1551657600
    ), tzone = "UTC", tclass = "Date"), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", .CLASS = "integer")
    
    secondxts <- structure(1:6, .Dim = c(6L, 1L), index = structure(c(1550880000, 
    1550966400, 1551052800, 1551139200, 1551225600, 1551312000), tzone = "UTC", tclass = "Date"), class = c("xts", 
    "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", .CLASS = "integer")
    

    【讨论】:

    • 非常感谢。进一步,如果列的名称和数量没有确定,如何更改代码?谢谢。
    • 列名并不重要,一个自写的函数可以解决这个问题。但是多个未确定的列可能是一个问题,因为您需要知道需要哪一列来填充 na。因此,如果您可以创建一个示例以及需要根据第二个 xts 中的哪一列填充哪一列的规则,并将其添加到您的问题中,我或其他人可以查看。
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2013-04-10
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多