如何在xts中返回与排序列表的每个成员关联的日期

时间:2011-09-19 14:24:21

标签: r xts

我有一个xts对象'foo',其中包含一段时间内股票价格的前六大负百分比变化。使用sort(foo)生成按日期排序的列表,如下所示,但我想根据值对列表进行排序。

sort(coredata(foo))为我提供了我期望的列表,但返回的值没有关联的索引日期值,如下所示。我想要一个格式列表:

2008-11-07 -0.150
2008-11-06 -0.145

我觉得index()which()的某种组合可能有用,但却无法产生任何有用的东西。任何指针都感激不尽。

sort(foo)

   [,1]
2008-10-08 -0.105
2008-10-16 -0.119
2008-10-27 -0.109
2008-11-06 -0.145
2008-11-07 -0.150
2008-12-12 -0.121

sort(coredata(foo))
[1] -0.150 -0.145 -0.121 -0.119 -0.109 -0.105

3 个答案:

答案 0 :(得分:1)

根据这一点,你可以按照所需的顺序给出日期:

 index(foo)[ order(coredata(foo)) ]

xts和zoo对象不喜欢无序显示,所以我认为你需要将它们强制推向一个不那么“秩序”的类:

> foo3 <- as.data.frame(foo)
> foo3[order(foo3$V1), ]
[1] -0.150 -0.145 -0.121 -0.119 -0.109 -0.105
> foo3[order(foo3$V1), ,drop=FALSE]
               V1
2008-11-07 -0.150
2008-11-06 -0.145
2008-12-12 -0.121
2008-10-16 -0.119
2008-10-27 -0.109
2008-10-08 -0.105

答案 1 :(得分:0)

我认为print的{​​{1}}方法强加了日期排序,因此您无法通过单独的子集来解决此问题:比较xtsfoo[1:2]

为了得到你想要的东西,你可以试试,

foo[2:1]

然而, <{1}}对象

答案 2 :(得分:0)

正如@DWin指出的那样,索引必须是有序的(动物园代表“Z的有序对象”),所以你不能对xts / zoo对象进行解码。

您可以使用fmt coredata.xts参数(如?coredata.xts中所述)与drop结合使用来获取一个命名向量,然后您可以按照自己的意愿进行排序。

sort(drop(coredata(x,fmt=TRUE)))
# 2008-11-07 2008-11-06 2008-12-12 2008-10-16 2008-10-27 2008-10-08 
#     -0.150     -0.145     -0.121     -0.119     -0.109     -0.105