rank {base} | R Documentation

## Sample Ranks

### Description

Returns the sample ranks of the values in a vector. Ties (i.e., equal values) and missing values can be handled in several ways.

### Usage

    rank(x, na.last = TRUE,
         ties.method = c("average", "first", "last", "random", "max", "min"))

### Arguments

`x` | a numeric, complex, character or logical vector.
`na.last` | for controlling the treatment of `NA`s. If `TRUE`, missing values in the data are put last; if `FALSE`, they are put first; if `NA`, they are removed; if `"keep"` they are kept with rank `NA`.
`ties.method` | a character string specifying how ties are treated, see ‘Details’; can be abbreviated.

### Details

If all components are different (and no `NA`s), the ranks are well defined, with values in `seq_along(x)`. With some values equal (called ‘ties’), the argument `ties.method` determines the result at the corresponding indices. The `"first"` method results in a permutation with increasing values at each index set of ties, and analogously `"first"` with decreasing values. The `"random"` method puts these in random order whereas the default, `"average"`, replaces them by their mean, and `"max"` and `"min"` replaces them by their maximum and minimum respectively, the latter being the typical sports ranking.

`NA` values are never considered to be equal: for `na.last = TRUE` and `na.last = FALSE` they are given distinct ranks in the order in which they occur in `x`.

NB: `rank` is not itself generic but `xtfrm` is, and `rank(xtfrm(x), ....)` will have the desired result if there is a `xtfrm` method. Otherwise, `rank` will make use of `==`, `>`, `is.na` and extraction methods for classed objects, possibly rather slowly.

### Value

A numeric vector of the same length as `x` with names copied from `x` (unless `na.last = NA`, when missing values are removed). The vector is of integer type unless `x` is a long vector or `ties.method = "average"` when it is of double type (whether or not there are any ties).

### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

### See Also

`order` and `sort`; `xtfrm`, see above.

### Examples

    (r1 <- rank(x1 <- c(3, 1, 4, 15, 92)))
    x2 <- c(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
    names(x2) <- letters[1:11]
    (r2 <- rank(x2)) # ties are averaged

    ## rank() is "idempotent": rank(rank(x)) == rank(x) :
    stopifnot(rank(r1) == r1, rank(r2) == r2)

    ## ranks without averaging
    rank(x2, ties.method= "first")  # first occurrence wins
    rank(x2, ties.method= "last")   #  last occurrence wins
    rank(x2, ties.method= "random") # ties broken at random
    rank(x2, ties.method= "random") # and again

    ## keep ties ties, no average
    (rma <- rank(x2, ties.method= "max"))  # as used classically
    (rmi <- rank(x2, ties.method= "min"))  # as in Sports
    stopifnot(rma + rmi == round(r2 + r2))

    ## Comparing all tie.methods:
    tMeth <- eval(formals(rank)$ties.method)
    rx2 <- sapply(tMeth, function(M) rank(x2, ties.method=M))
    cbind(x2, rx2)
    ## ties.method's does not matter w/o ties:
    x <- sample(47)
    rx <- sapply(tMeth, function(MM) rank(x, ties.method=MM))
    stopifnot(all(rx[,1] == rx))

[Package base version 3.3.2 Index]