2011-09-19 15 views
0

我有一個xts對象'foo',其中包含股票在特定時間段內的股票價格的前6個最大負向百分比變化。使用sort(foo)會生成一個按日期排序的列表,如下所示,但我想根據這些值對列表進行排序。如何在xts中返回與排序列表中的每個成員關聯的日期

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 

回答

1

沿此線會給你所需的順序日期的東西:

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

XTS和動物園對象不喜歡被顯示出來的順序,所以我認爲你需要強迫他們到少「訂單」 -ly類:

> 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 
+0

由於雙方詹姆斯和迪文;。我學到了一些東西從兩個答案,迪文的是更加容易的把握像我這樣的初學者,我試圖避免轉換爲數據框,但我想是這樣考慮到性能不成問題,這不算什麼問題。 – SlowLearner

0

我認爲xtsprint法規定的日期排序,所以你不能用子集化ALO解決這個ne:比較foo[1:2]foo[2:1]

爲了得到你想要的,你可以嘗試一下,

ord <- order(foo) 
dat <- data.frame(x=coredata(foo)[ord]) 
rownames(dat) <- index(foo)[ord] 

xts對象不過。

0

由於@DWin指出,該指數必須訂購(動物園表示「Z的命令對象),所以你不能取消訂單XTS /動物園的對象。

可以使用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 
相關問題