我有两个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
联盟有简单的方法吗?谢谢
我不确定你是否会称之为简单,但这就是诀窍。首先将两个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")