2013-07-22 38 views
1

我想排列數據框的一列,但我希望根據它的順序排列而不是升序或降序排列。類似下面:根據訂單在R中排列一個向量

> test <- c(0,0,0,2,1,5,3) 

,然後排序是這樣的:

[1] 1 1 1 2 3 4 5 

是什麼做的最簡單的方法? 預先感謝您。

+2

如何處理非連續重複?例如:'test < - c(0,2,1,0,3,5,3)'? – Arun

+0

@Arun其實重要的因素只是元素的「順序」,所以在你的例子中第二個零應該得到rank = 4。所以總排名應該是:([1] 1 2 3 4 5 6 7) – hora

回答

8

使用rle

test = c(0,0,0,2,1,5,3) 
rle_test = rle(test) 
ordered = rep(1:length(rle_test$lengths), rle_test$lengths) 

輸出:

> ordered 
[1] 1 1 1 2 3 4 5 
0

一種替代將使用在data.table包的聯繫frankv的= 「密」 選項():

x

[1] 12 9 5 7 15 7 7 8 7 13 6 12 7 12 5 2 8 28 20 9 10 3 12 6 1

frankv(X,領帶= 「密」)

[1] 10 8 4 6 12 6 6 7 6 11 5 10 6 10 4 2 7 14 13 8 9 3 10 5 1