base (version 3.5.3)

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

## Description

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.

## 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

## Value

A matrix or data frame containing the sums. There will be one row per unique value of `group`.

## 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`.

## See Also

`tapply`, `aggregate`, `rowSums`

## Examples

Run this code
``````# 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]
# }
``````

Run the code above in your browser using DataCamp Workspace