This function returns the kth smallest, resp. largest values from a vector x.
Usage
Small(x, k = 5, unique = FALSE, na.rm = FALSE)
Large(x, k = 5, unique = FALSE, na.rm = FALSE)
Arguments
x
a numeric vector
k
an integer >0 defining how many extreme values should be returned. Default is k = 5. If k > length(x), all values will be returned.
unique
logical, defining if unique values should be considered or not. If this is set to TRUE, a list with the k extreme values and their frequencies is returned. Default is FALSE (as unique is a rather expensive function).
na.rm
logical, indicating whether NA values should be stripped before the computation proceeds. Defaults to FALSE.
Value
either a vector with the k most extreme values, if unique is set to FALSE
or a list, containing the k most extreme values and their respective frequency.
Details
There are several points of this problem discussed out there. This implementation uses the function sort(..., partial), which isn't the fastest solution, but a fairly fast one.
x <- sample(1:10, 1000, rep=TRUE)
Large(x, 3)
Large(x, k=3, unique=TRUE)
# works fine up to x ~ 1e6x <- runif(1000000)
Small(x, 3, unique=TRUE)
Small(x, 3, unique=FALSE)