【发布时间】:2012-01-05 21:00:45
【问题描述】:
调用merge.xts 后,我生成的时间序列对象有 3 列,分别命名为 A.1、B.1、C.1。原始 xts 对象都设置了 A、B、C 列。我假设合并是按照文档在所有公共列上执行的。
我检查了列内容 A、B、C 和 A.1、B.1、C.1。对my.merged[my.merged$A.1 != my.merged$A, ] 的调用不会为所有这些列返回任何行。
为什么公共列没有折叠在一组中?
【问题讨论】:
调用merge.xts 后,我生成的时间序列对象有 3 列,分别命名为 A.1、B.1、C.1。原始 xts 对象都设置了 A、B、C 列。我假设合并是按照文档在所有公共列上执行的。
我检查了列内容 A、B、C 和 A.1、B.1、C.1。对my.merged[my.merged$A.1 != my.merged$A, ] 的调用不会为所有这些列返回任何行。
为什么公共列没有折叠在一组中?
【问题讨论】:
?merge.xts 很清楚地说它是“用于按时间(索引)对'xts'对象执行合并操作。”它没有说合并是在公共列上完成的。您可能在 ?merge 中读到过,参考了 data.frame 方法。
【讨论】:
merge.xts 增加很多复杂性来检查两个或多个正在合并的对象中的列是否相等(例如,如果数据相同但列名不同怎么办?比较浮点数的容差是多少?如果两个对象中的列中的数据相同,但第三个对象中名称相似的列不同怎么办?等等,等等)。
我想你可能想要的是rbind,而不是merge。我在http://darrendev.blogspot.jp/2012/08/small-rxts-code-snippets-and-tips.html 写了一篇博客,并附有示例数据(请参阅第 6a 和 6b 项)。
如果您在要合并的两个 xts 对象中具有相同的时间戳,那么您将获得重复的行。因此,为了获得您想要的结果,您可以在后处理步骤中删除重复项。
【讨论】: