\Header{subset}{Subsetting Vectors and Data Frames}
\methalias{subset.data.frame}{subset}
\methalias{subset.default}{subset}
\keyword{manip}{subset}
\begin{Description}\relax
Return subsets of vectors or data frames which meet conditions.
\end{Description}
\begin{Usage}
\begin{verbatim}
subset(x, ...)

## Default S3 method:
subset(x, subset, ...)

## S3 method for class 'data.frame':
subset(x, subset, select, drop = FALSE, ...)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{x}] object to be subsetted.
\item[\code{subset}] logical expression.
\item[\code{select}] expression, indicating columns to select from a
data frame.
\item[\code{drop}] passed on to \code{[} indexing operator.
\item[\code{...}] further arguments to be passed to or from other methods.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
For ordinary vectors, the result is simply
\code{x[subset \& !is.na(subset)]}.

For data frames, the \code{subset} argument works similarly on the
rows.  Note that \code{subset} will be evaluated in the data frame, so
columns can be referred to (by name) as variables.

The \code{select} argument exists only for the method for data frames.
It works by
first replacing names in the selection expression with the
corresponding column numbers in the data frame and then using the
resulting integer vector to index the columns.  This allows the use
of the standard indexing conventions so that for example ranges of
columns can be specified easily.

Setting \code{drop=TRUE} will drop unused levels from factors in a
data frame. The default is to retain them.
\end{Details}
\begin{Value}
An object similar to \code{x} contain just the selected elements (for
a vector), rows and columns (for a data frame), and so on.
\end{Value}
\begin{Author}\relax
Peter Dalgaard
\end{Author}
\begin{SeeAlso}\relax
\code{\Link{[}}, 
\code{\Link{transform}}
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
data(airquality)
subset(airquality, Temp > 80, select = c(Ozone, Temp))
subset(airquality, Day == 1, select = -Temp)
subset(airquality, select = Ozone:Wind)

with(airquality, subset(Ozone, Temp > 80))
\end{ExampleCode}
\end{Examples}

