2012-10-17 63 views
0

使用示例可能更容易解釋我自己。 比方說,我有一個列表S:對包含不同類型的列表或對象進行排序R

小號< - 列表(C(5,3,4,3,6),C( 「A」, 「B」, 「C」, 「d」 ,「E」))

s對於所有子向量總是具有相同數量的對象。 NA值是不允許的。載體包含不同的類型。

我想實現的是:

rank v1 v2 
1  3 "B" 
2  3 "D" 
3  4 "C" 
4  5 "A" 
5  6 "E" 

基本上,排序基於第一矢量列表(升序),然後(如果在並列)使用詞彙學的看向第二矢量訂購。在C++世界中,我需要做的唯一事情就是爲我的對象定義運算符<,但是我非常新的R,我正在耗盡想法。

我發現的最佳策略是遍歷元素並計算每對情侶的等級值(雙倍)(例如,3「B」將導致最高等級和6「E」最低等級) ,將結果存儲在另一個向量中並對其進行排序。然而,這個解決方案並不是很好,因爲找到一個好的排名函數可能會非常棘手,並且不容易一概而論。

在我看來,這似乎是一個共同的問題,它必須是一個更好的方法。任何人都可以將我指向正確的方向嗎?

感謝您的幫助。

回答

4

使用order()

s <- data.frame(v1=c(5,3,4,3,6), v2=c("A","B","C","D","E")) 
s[order(s$v1, s$v2), ] 
    v1 v2 
2 3 B 
4 3 D 
3 4 C 
1 5 A 
5 6 E 

請注意,我改變你的列表中的數據幀。由於數據框本身就是一個列表(所有元素的長度相同),這對你的情況應該不成問題。

+1

如果有許多列,並且它們與傳遞給'order'的順序相同,您也可以使用'do.call(order,s)'。 –

+0

謝謝,這是完美的。 –

相關問題