R xts如何将两个xts / zoo与重叠时间范围以及主要和第二个结合起来

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

我有两个xts / zoo,一个是main,另一个是seconday。我希望按行合并它们。两个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个回答
0
投票

我不确定你是否会称之为简单,但这就是诀窍。首先将两个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")
© www.soinside.com 2019 - 2024. All rights reserved.