R: Evaluates a Function Groupwise

DoBy {DescTools} | R Documentation

## Evaluates a Function Groupwise

### Description

Split the vector x into partitions and apply the function to each partition separately. Computation restarts for each partition.
The logic is the same as the OLAP functions in SQL, e.g. `SUM(x) OVER (PARTITION BY group)`.

### Usage

    DoBy(x, ...)

    ## S3 method for class 'formula'
    DoBy(formula, data = parent.frame(), subset, na.action,
         vnames = NULL, ...)
    ## Default S3 method:
    DoBy(x, by, FUN, vnames = NULL, collapse = FALSE, ...)

### Arguments

`x` | a vector that should be operated.
`by` | list of one or more factors, each of same length as `x`. If `by` is not a factor, the elements are coerced to factors by `as.factor()`.
`FUN` | Function to apply for each factor level combination.
`formula` | a formula of the form `lhs ~ rhs` where `lhs` gives the data values and rhs the corresponding groups.
`data` | an optional matrix or data frame (or similar: see `model.frame`) containing the variables in the formula `formula`. By default the variables are taken from the `parent.frame()`.
`subset` | an optional vector specifying a subset of observations to be used.
`na.action` | a function which indicates what should happen when the data contain `NA`s. Defaults to `getOption("na.action")`.
`vnames` | name for the new variables.
`collapse` | logical, determining if the results should be collapsed to groups. Default is `FALSE`.
`...` | optional arguments to `FUN`: See the "Note" section.

### Details

This is more or less the same as the function `ave`, with the arguments organized a bit different and offering more flexibility.

### Value

a data.frame with the same number of rows as length as `x` containing the groupwise results of `FUN` and the used group factors.
The attribute `response` denotes the name of the response variable in case the formula interface was used.

### Note

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

### Author(s)

Andri Signorell <andri@signorell.net>

### See Also

`ave`, `tapply`, `aggregate`

### Examples

    d.frm <- data.frame(x=rep(1:4,3), v=sample(x=1:3, size=12, replace=TRUE),
                        g=gl(4,3,labels=letters[1:4]), m=gl(3,4,labels=LETTERS[1:3]))

    # SQL-OLAP: sum() over (partition by g)
    DoBy(d.frm$x, d.frm$g, FUN=sum)
    # DoBy(d.frm$x, FUN=sum)

    # more than 1 grouping variables are organized as list as in tapply:
    DoBy(d.frm$x, list(d.frm$g, d.frm$m), mean)

    # count
    d.frm$count <- DoBy(d.frm$x, d.frm$g, length)

    # rank
    d.frm$rank <- DoBy(d.frm$v, d.frm$g, rank)
    d.frm$dense_rank <- DoBy(d.frm$v, d.frm$g, DenseRank)
    d.frm$rank_desc <- DoBy(d.frm$x, d.frm$g, function(x) rank(-x))

    # row_number
    d.frm$row_number <- DoBy(d.frm$v, d.frm$g, function(x) order(x))
    d.frm

[Package DescTools version 0.99.36 Index]