3

我正在使用 quantmod 生成带有股票信息的 XTS 对象,并且我希望编译/堆叠一堆 XTS 文档以处理代码。将 Rbind 与 XTS 一起使用,我发现它不会将 XTS 堆叠在一起,而是按日期合并和排序:

x <- xts(1:10, Sys.Date()+1:10)
x
       [,1]
2014-07-10    1
2014-07-11    2
2014-07-12    3
2014-07-13    4
2014-07-14    5
2014-07-15    6
2014-07-16    7
2014-07-17    8
2014-07-18    9
2014-07-19   10
 y <- xts(rep(2,3), Sys.Date()+c(1,2,3))
 y
       [,1]
2014-07-10    2
2014-07-11    2
2014-07-12    2
 rbind(x,y)
       [,1]
2014-07-10    1
2014-07-10    2
2014-07-11    2
2014-07-11    2
2014-07-12    3
2014-07-12    2
2014-07-13    4
2014-07-14    5
2014-07-15    6
2014-07-16    7
2014-07-17    8
2014-07-18    9
2014-07-19   10

警告消息:在 rbind(deparse.level, ...) 中:类型不匹配:将对象转换为数字

问题 1 - 为什么会有警告信息?

问题 2 - 如何正确堆叠 XTS,可能是一个新手问题,但需要绑定看起来像这样:

2014-07-10    1
2014-07-11    2
2014-07-12    3
2014-07-13    4
2014-07-14    5
2014-07-15    6
2014-07-16    7
2014-07-17    8
2014-07-18    9
2014-07-19   10
2014-07-10    2
2014-07-11    2
2014-07-12    2
4

2 回答 2

2

1)x是整数;y是数字。xts 对象是具有有序索引属性的矩阵。您不能在矩阵中混合类型,因此x转换为数字。

2)你不能。xts 是一个时间序列类。如果 xts 允许您的数据不按时间排序,那将是非常糟糕和混乱的。

于 2014-07-09T20:46:36.623 回答
0

xts是从 派生的时间序列对象zoo。它只是一个按时间索引的矩阵对象。rbind在两个对象之间使用xts将按时间对它们进行排序。

如果您想将它们堆叠在一起,您应该只使用它们coredata作为matrix对象。

datax = coredata(x) 
datay = coredata(y)

rbinding = rbind(datax, datay)

但是,您将丢失时间信息。我不知道你的 porpouse 是什么,但这应该可以解决问题。

如果您想“保留”数据来自的 xts 对象的信息,您可以使用 merge 代替,它将创建您正在使用的股票行情,但数据位于正确的时间位置。

merge(x, y, join = "outer", fill = NA)
于 2020-12-02T17:10:22.360 回答