2011-05-11 66 views
2

漂亮福利局的問題在這裏,但我一直無法追查了一段時間的解決方案:訂購表A根據表B的排名

我的交易指標的XTS對象(表示 ),用於庫存數據看起來像

   A   XOM   MSFT 
2000-11-30 -0.59  0.22   0.10 
2000-12-29 0.55  -0.23   0.05 
2001-01-30 -0.52  0.09   -0.10 

並與用於相應的時段的回報,看起來像

   A   XOM   MSFT 
2000-11-30 -0.15  0.10   0.03 
2000-12-29 0.03  -0.05   0.02 
2001-01-30 -0.04  0.02   -0.05 
相同的索引( 返回)的表

我已經整理了指標表,把它用下面的代碼返回列名:

indicate.label <- colnames(indicate) 
indicate.rank <- t(apply(indicate, 1, function(x) indicate.label[order(-x)]))  
indicate.rank <- xts(indicate.rank, order.by = index(returns)) 

這給表(indicate.rank)的符號名通過交易指標排名:

   1   2   3 
2000-11-30 XOM   MSFT   A 
2000-12-29  A   MSFT   XOM 
2001-01-30 XOM   A   MSFT 

我想也有一個表,給出了基於該指標均居期收益:

2000-11-30 0.10   0.03   -0.15 
2000-12-29 0.03   0.02   -0.05 
2001-01-30 0.02  -0.04   -0.05 

我不知道如何調用所有行的正確符號,或者只是根據的順序返回排序表

謝謝你的任何建議。

特雷弗Ĵ

+1

爲了便於測試,如果您在前兩個xts對象上提供了輸出的輸出會更好。 – 2011-05-11 01:15:07

+0

感謝您的回覆。我在這裏使用了大約2500個符號,所以我給出了數據看起來像什麼的縮寫表示。我很樂意發佈輸出,但它的大約7.5MB。有沒有辦法將文件附加到帖子? – moonvest 2011-05-12 07:13:53

回答

1

我不是特別滿意,這個解決方案,但它的工作原理。

row.rank <- t(apply(indicate, 1, order, decreasing=TRUE)) 
indicate.rank <- return.rank <- indicate # pre-allocate 
for(i in 1:NROW(indicate.rank)) { 
    indicate.rank[i,] <- colnames(indicate)[row.rank[i,]] 
    return.rank[i,] <- return[i,row.rank[i,]] 
} 

它可能會更容易來處理這個如果回報和每個符號的指標均在同一個對象,但我不知道怎麼會符合您的工作流程的其餘部分。

+0

Josh, 感謝您的幫助。我同意如果數據分組更好,可能會有更優雅的解決方案。一開始我試圖做到這一點,但沒有一個麻煩的循環找不到方法。但我是R新手,所以我會再看一次。 – moonvest 2011-05-12 07:12:05

相關問題