R: Give row sums of a matrix or data frame, based on a grouping variable

rowsum {base} | R Documentation

## Give row sums of a matrix or data frame, based on a grouping variable

### Description

Compute sums across rows of a matrix-like object for each level of a grouping variable. `rowsum` is generic, with methods for matrices and data frames.

### Usage

    rowsum(x, group, reorder = TRUE, ...)

### Arguments

`x` | a matrix, data frame or vector of numeric data. Missing values are allowed.
`group` | a vector 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 rows were encountered.
`...` | other arguments for future 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 add all the rows of a matrix (ie, a single `group`) use `rowSums`, which should be even faster.

### Value

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

### See Also

`tapply`, `aggregate`, `rowSums`

### Examples

    x <- matrix(runif(100), ncol=5)
    group <- sample(1:8, 20, TRUE)
    xsum <- rowsum(x, group)
    ## Slower versions
    xsum2 <- tapply(x, list(group[row(x)], col(x)), sum)
    xsum3<- aggregate(x,list(group),sum)

[Package Contents]