Tou Mou
Tou Mou

Reputation: 1274

How to sort a vector in R without repeating ranks

Good afternoon ,

My question may seem very elementary but i'm getting troubles with it.

Assume we have the following vector :

x=c(0.75,0.75,1,1,0.5,0.5,0.5,0.25,0.25)

I'm willing to sort the vector decreasingly , then getting indices which means :

sort.int(x, index.return=TRUE,decreasing=TRUE)
$x
[1] 1.00 1.00 0.75 0.75 0.50 0.50 0.50 0.25 0.25

$ix
[1] 3 4 1 2 5 6 7 8 9

However, the expected output should be :

y=c(2,2,1,1,3,3,3,4,4)

This means :

1 is the highest value ----- > 1 
0.75 is the second highest value ----- > 2
0.5 is the third ----- > 3
0.25 is the lowest value -----> 4

I also tried :

x=c(0.75,0.75,1,1,0.5,0.5,0.5,0.25,0.25)

order(unique(sort(x)))

sort(unique(x),decreasing=TRUE)

[1] 1 2 3 4
[1] 1.00 0.75 0.50 0.25

But I don't know how to subset from x to get the expected output y .

Thank you for help !

Upvotes: 0

Views: 93

Answers (1)

Gregor Thomas
Gregor Thomas

Reputation: 145765

sort will sort all the values, and use each value once. It seems like you want to ignore the indices of duplicated values after the first. We can use match for this, which will always return the index of the first match.

match(sort.int(x, decreasing = TRUE), unique(x))
# [1] 2 2 1 1 3 3 3 4 4

Upvotes: 3

Related Questions