# rowsum

##### Give Column Sums of a Matrix or Data Frame, Based on a Grouping Variable

Compute column sums across rows of a numeric matrix-like 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, …)`# S3 method for data.frame
rowsum(x, group, reorder = TRUE, na.rm = FALSE, …)

# S3 method for default
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 of`sort(unique(group))`

, if`FALSE`

, it will be in the order that groups were encountered.- na.rm
logical (

`TRUE`

or`FALSE`

). Should`NA`

(including`NaN`

) 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)`

```
# NOT RUN {
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]
# }
```

*Documentation reproduced from package base, version 3.4.3, License: Part of R 3.4.3*