tapply {base} | R Documentation |
Apply a function to each cell of a ragged array, that is to each (non-empty) group of values given by a unique combination of the levels of certain factors.
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
X |
an atomic object, typically a vector. |
INDEX |
list of factors, each of same length as X . |
FUN |
the function to be applied. In the case of functions like
+ , %*% , etc., the function name must be quoted. If
FUN is NULL , tapply returns a vector which can be used
to subscript the multi-way array tapply normally produces. |
... |
optional arguments to FUN . |
simplify |
If FALSE , tapply always returns an array
of mode "list" . If TRUE (the default), then if
FUN always returns a scalar, tapply returns an array
with the mode of the scalar. |
When FUN
is present, tapply
calls FUN
for each
cell that has any data in it. If FUN
returns a single atomic
value for each cell (e.g., functions mean
or var
) and
when simplify
is TRUE
, tapply
returns a multi-way
array containing the values. The array has the same number of
dimensions as INDEX
has components; the number of levels in a
dimension is the number of levels (nlevels()
) in the
corresponding component of INDEX
.
Note that contrary to S, simplify = TRUE
always returns an
array, possibly 1-dimensional.
If FUN
does not return a single atomic value, tapply
returns an array of mode list
whose components are the
values of the individual calls to FUN
, i.e., the result is a
list with a dim
attribute.
Note that optional arguments to FUN
supplied by the
...
argument are not divided into cells. It is therefore
inappropriate for FUN
to expect additional arguments with
the same length as X
.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
the convenience functions by
and
aggregate
(using tapply
);
apply
,
lapply
with its versions
sapply
and mapply
.
require(stats) groups <- as.factor(rbinom(32, n = 5, p = .4)) tapply(groups, groups, length) #- is almost the same as table(groups) ## contingency table from data.frame : array with named dimnames tapply(warpbreaks$breaks, warpbreaks[,-1], sum) tapply(warpbreaks$breaks, warpbreaks[, 3, drop = FALSE], sum) n <- 17; fac <- factor(rep(1:3, len = n), levels = 1:5) table(fac) tapply(1:n, fac, sum) tapply(1:n, fac, sum, simplify = FALSE) tapply(1:n, fac, range) tapply(1:n, fac, quantile) ## example of ... argument: find quarterly means tapply(presidents, cycle(presidents), mean, na.rm = TRUE) ind <- list(c(1, 2, 2), c("A", "A", "B")) table(ind) tapply(1:3, ind) #-> the split vector tapply(1:3, ind, sum)