我有一个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
答案 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}}方法强加了日期排序,因此您无法通过单独的子集来解决此问题:比较xts
和foo[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