# Rank-Order

### Likan Zhan ·
2017-03-07

`rank`

tells you what order the numbers are in, while `order`

tells you how to get them in ascending order. In other words, `order(x)`

tells you which element of the original vector needs to be put first, second, etc., so as to sort the original vector, whereas `rank(x)`

tell you which element has the lowest, second lowest, etc., value. For example:

```
a <- c(45, 50, 10, 96)
order(a)
```

`## [1] 3 1 2 4`

`rank(a)`

`## [1] 2 3 1 4`

- So order(a) is saying, ‘put the third element first when you sort…’, whereas rank(a) is saying, ‘the first element is the second lowest…’. (Note that they both agree on which element is lowest, etc.; they just present the information differently.) Thus we see that we can use order() to sort, but we can’t use
`rank()`

that way:

```
a[order(a)]
sort(a)
a[rank(a)]
```

- In general,
`order()`

will not equal `rank()`

unless the vector has been sorted already:

```
b <- sort(a)
order(b) == rank(b)
```

- Also, since
`order()`

is (essentially) operating over ranks of the data, you could compose them without affecting the information, but the other way around produces gibberish:

```
order(rank(a))==order(a)
rank(order(a))==rank(a)
```