subset(x, ...)"subset"(x, subset, ...)"subset"(x, subset, select, drop = FALSE, ...)"subset"(x, subset, select, drop = FALSE, ...)
xcontain just the selected elements (for a vector), rows and columns (for a matrix or data frame), and so on.
[, and in particular the non-standard evaluation of argument
subsetcan have unanticipated consequences.
For ordinary vectors, the result is simply
x[subset & !is.na(subset)].
For data frames, the
subset argument works on the rows. Note
subset will be evaluated in the data frame, so columns can
be referred to (by name) as variables in the expression (see the examples).
select argument exists only for the methods for data frames
and matrices. It works by first replacing column 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, or single
columns can be dropped (see the examples).
drop argument is passed on to the indexing method for
matrices and data frames: note that the default for matrices is
different from that for indexing.
Factors may have empty levels after subsetting; unused levels are
not automatically removed. See
droplevels for a way to
drop all unused levels from a data frame.
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)) ## sometimes requiring a logical 'subset' argument is a nuisance nm <- rownames(state.x77) start_with_M <- nm %in% grep("^M", nm, value = TRUE) subset(state.x77, start_with_M, Illiteracy:Murder) # but in recent versions of R this can simply be subset(state.x77, grepl("^M", nm), Illiteracy:Murder)