Rev 47262 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/unique.Rd% Part of the R package, http://www.R-project.org% Copyright 1995-2008 R Core Development Team% Distributed under GPL 2 or later\name{unique}\alias{unique}\alias{unique.default}\alias{unique.data.frame}\alias{unique.matrix}\alias{unique.array}\title{Extract Unique Elements}\description{\code{unique} returns a vector, data frame or array like \code{x}but with duplicate elements/rows removed.}\usage{unique(x, incomparables = FALSE, \dots)\method{unique}{default}(x, incomparables = FALSE, fromLast = FALSE, \dots)\method{unique}{matrix}(x, incomparables = FALSE, MARGIN = 1,fromLast = FALSE, \dots)\method{unique}{array}(x, incomparables = FALSE, MARGIN = 1,fromLast = FALSE, \dots)}\arguments{\item{x}{a vector or a data frame or an array or \code{NULL}.}\item{incomparables}{a vector of values that cannot be compared.\code{FALSE} is a special value, meaning that all values can becompared, and may be the only value accepted for methods other thanthe default. It will be coerced internally to the same type as\code{x}.}\item{fromLast}{logical indicating if duplication should be consideredfrom the last, i.e., the last (or rightmost) of identical elements willbe kept. This only matters for \code{\link{names}} or\code{\link{dimnames}}.}\item{\dots}{arguments for particular methods.}\item{MARGIN}{the array margin to be held fixed: a single integer.}}\details{This is a generic function with methods for vectors, data frames andarrays (including matrices).The array method calculates for each element of the dimensionspecified by \code{MARGIN} if the remaining dimensions are identicalto those for an earlier element (in row-major order). This would mostcommonly be used for matrices to find unique rows (the default) or columns(with \code{MARGIN = 2}).Note that unlike the Unix command \code{uniq} this omits\emph{duplicated} and not just \emph{repeated} elements/rows. Thatis, an element is omitted if it is identical to any previous elementand not just if it is the same as the immediately previous one.(For the latter, see \code{\link{rle}}).Missing values are regarded as equal, but \code{NaN} is not equal to\code{NA_real_}.Values in \code{incomparables} will never be marked as duplicated.This is intended to be used for a fairly small set of values and willnot be efficient for a very large set.}\value{For a vector, an object of the same type of \code{x}, but with onlyone copy of each duplicated element. No attributes are copied (sothe result has no names).For a data frame, a data frame is returned with the same columns butpossibly fewer rows (and with row names from the first occurrences ofthe unique rows).A matrix or array is subsetted by \code{[, drop = FALSE]}, sodimensions and dimnames are copied appropriately, and the resultalways has the same number of dimensions as \code{x}.}\section{Warning}{Using this for lists is potentially slow, especially if the elementsare not atomic vectors (see \code{\link{vector}}) or differ onlyin their attributes. In the worst case it is \eqn{O(n^2)}.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\seealso{\code{\link{duplicated}} which gives the indices of duplicatedelements.\code{\link{rle}} which is the equivalent of the Unix \code{uniq -c}command.}\examples{x <- c(3:5, 11:8, 8 + 0:5)(ux <- unique(x))(u2 <- unique(x, fromLast = TRUE)) # different orderstopifnot(identical(sort(ux), sort(u2)))length(unique(sample(100, 100, replace=TRUE)))## approximately 100(1 - 1/e) = 63.21unique(iris)}\keyword{manip}\keyword{logic}