【问题标题】:Updating an XTS object更新 XTS 对象
【发布时间】:2013-02-01 06:26:02
【问题描述】:

我一直在努力做一些在 R 上可能非常简单的事情。我想做的是使用另一个 XTS 对象更新 XTS 对象列。

假设我有以下 XTS 对象,名为 Object1:

A B
2000-01-03 , 14, NA
2000-01-04 , NA, NA
2000-01-05 , 16, 100
2000-01-06 , NA, 200

还有以下 XTS 对象,名为 Object2:

A
2000-01-05 , 160
2000-01-06 , 20

我正在寻找一种使用 Object2 中的值更新 Object1 的方法,结果如下:

A B
2000-01-03 , 14, NA
2000-01-04 , NA, NA
2000-01-05 , 160, 100
2000-01-06 , 20, 200

如果我合并(Object1,Object2),我将拥有:

A B A.1
2000-01-03 , 14, NA, NA
2000-01-04 , NA, NA, NA
2000-01-05 , 16, 100, 160
2000-01-06 , NA, 200, 20

这绝对不是我想要的,因为我正在尝试基于 Object2$A 更新 Object1$A。

我在这里错过了什么?

这里是 dput(Object1)dput(Object2) 的输出,以便重现:

> dput(Object1)
structure(c(14, NA, 16, NA, NA, NA, 100, 200), .Dim = c(4L, 2L
), index = structure(c(946857600, 946944000, 947030400, 947116800
), tzone = "UTC", tclass = "Date"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", .Dimnames = list(
    NULL, c("A", "B")), class = c("xts", "zoo"))

> dput(Object2)
structure(c(160, 20), .Dim = c(2L, 1L), index = structure(c(947030400, 
947116800), tzone = "UTC", tclass = "Date"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", .Dimnames = list(
    NULL, "A"), class = c("xts", "zoo"))

【问题讨论】:

  • dput 信息有助于其他人尝试复制您的问题。
  • 哎呀,由于我对stackoverflow完全陌生,我以为我错误地复制粘贴了问题末尾的代码,所以我一看到它就回去并删除它......道歉

标签: r merge xts


【解决方案1】:

您可以使用Object2 的索引对Object1 进行子集化

> Object1[index(Object2), "A"] <- Object2$A
> Object1
             A   B
2000-01-03  14  NA
2000-01-04  NA  NA
2000-01-05 160 100
2000-01-06  20 200

【讨论】:

  • 非常感谢!这完美无缺。我在使用合并时也遇到了一个小问题。
  • 对不起,这里有点新手,但我如何在 Object1 上创建一个列“Z_test”,填充 NA 值?
  • @user2026971,一种方法是Object1$Z_test &lt;- NA
  • 我试图以系统的方式来做这件事,比如 Object1[, "Z_test"] ,这样我就可以以编程方式创建列......有什么想法吗?
  • 当我这样做时,我得到“NextMethod(.Generic) 中的错误:下标越界”..
猜你喜欢
  • 2019-09-02
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多