rowsum
Give Column Sums of a Matrix or Data Frame, Based on a Grouping Variable
Compute column sums across rows of a numeric matrixlike object for
each level of a grouping variable. rowsum
is generic, with a
method for data frames and a default method for vectors and matrices.
 Keywords
 manip
Usage
rowsum(x, group, reorder = TRUE, ...)
"rowsum"(x, group, reorder = TRUE, na.rm = FALSE, ...)
"rowsum"(x, group, reorder = TRUE, na.rm = FALSE, ...)
Arguments
 x
 a matrix, data frame or vector of numeric data. Missing values are allowed. A numeric vector will be treated as a column vector.
 group
 a vector or factor giving the grouping, with one element
per row of
x
. Missing values will be treated as another group and a warning will be given.  reorder
 if
TRUE
, then the result will be in order ofsort(unique(group))
, ifFALSE
, it will be in the order that groups were encountered.  na.rm
 logical (
TRUE
orFALSE
). ShouldNA
(includingNaN
) values be discarded?  ...
 other arguments to be passed to or from methods
Details
The default is to reorder the rows to agree with tapply
as in
the example below. Reordering should not add noticeably to the time
except when there are very many distinct values of group
and
x
has few columns.
The original function was written by Terry Therneau, but this is a new implementation using hashing that is much faster for large matrices.
To sum over all the rows of a matrix (ie, a single group
) use
colSums
, which should be even faster.
For integer arguments, over/underflow in forming the sum results in
NA
.
Value

A matrix or data frame containing the sums. There will be one row per
unique value of
group
.
See Also
Examples
library(base)
require(stats)
x < matrix(runif(100), ncol = 5)
group < sample(1:8, 20, TRUE)
(xsum < rowsum(x, group))
## Slower versions
tapply(x, list(group[row(x)], col(x)), sum)
t(sapply(split(as.data.frame(x), group), colSums))
aggregate(x, list(group), sum)[1]
Community examples
Looks like there are no examples yet.