rank package:base R
Returns the sample ranks of the values in a vector. Ties
equal values) and missing values can be handled in several
rank(x, na.last = TRUE,
ties.method = c("average", "first", "random", "max",
x: a numeric, complex, character or logical vector.
na.last: for controlling the treatment of 'NA's. If 'TRUE',
values in the data are put last; if 'FALSE', they are put
first; if 'NA', they are removed; if '"keep"' they are
with rank 'NA'.
ties.method: a character string specifying how ties are treated, see
'Details'; can be abbreviated.
If all components are different (and no 'NA's), the ranks are
defined, with values in 'seq_len(x)'. With some values equal
(called 'ties'), the argument 'ties.method' determines the
at the corresponding indices. The '"first"' method results in a
permutation with increasing values at each index set of ties.
'"random"' method puts these in random order whereas the
'"average"', replaces them by their mean, and '"max"' and
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 =
and 'na.last = FALSE' they are given distinct ranks in the
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
'xtfrm' method. Otherwise, 'rank' will make use of '==',
'is.na' methods for classed objects, possibly rather slowly.
A numeric vector of the same length as 'x' with names copied
'x' (unless 'na.last = NA', when missing values are removed).
vector is of integer type unless 'ties.method = "average"' when
is of double type (whether or not there are any ties).
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New
Language_. Wadsworth & Brooks/Cole.
'order' and 'sort'.
(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= "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))