我想排列數據框的一列,但我希望根據它的順序排列而不是升序或降序排列。類似下面:根據訂單在R中排列一個向量
> test <- c(0,0,0,2,1,5,3)
,然後排序是這樣的:
[1] 1 1 1 2 3 4 5
是什麼做的最簡單的方法? 預先感謝您。
我想排列數據框的一列,但我希望根據它的順序排列而不是升序或降序排列。類似下面:根據訂單在R中排列一個向量
> test <- c(0,0,0,2,1,5,3)
,然後排序是這樣的:
[1] 1 1 1 2 3 4 5
是什麼做的最簡單的方法? 預先感謝您。
使用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
一種替代將使用在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
如何處理非連續重複?例如:'test < - c(0,2,1,0,3,5,3)'? – Arun
@Arun其實重要的因素只是元素的「順序」,所以在你的例子中第二個零應該得到rank = 4。所以總排名應該是:([1] 1 2 3 4 5 6 7) – hora