Rbind与XTS。如何堆叠而不按索引日期排序

时间:2014-07-09 18:22:32

标签: r xts quantmod rbind

我正在使用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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

如果要将它们堆叠在另一个之上,则只能使用它们的coredata对象matrix

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

rbinding = rbind(datax, datay)

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

如果您想“保留” xts对象的信息,则可以使用merge来代替数据,它会在要使用的行情自动收录器中创建一列,但数据的位置正确。 / p>

merge(x, y, join = "outer", fill = NA)