Rev 54754 | 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-2011 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 equal to any previous element andnot just if it is equal the immediately previous one. (For thelatter, see \code{\link{rle}}).Missing values are regarded as equal, but \code{NaN} is not equal to\code{NA_real_}. Character strings are regarded as equal if they arein different encodings but would agree when translated to UTF-8.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.When used on a data frame with more than one column, or an array ormatrix when comparing dimensions of length greater than one, thistests for identity of character representations. This willcatch people who unwisely rely on exact equality of floating-pointnumbers!Character strings with marked encoding \code{"bytes"} cannot becompared, so give an error.}\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}