# DoBy: Evaluates a Function Groupwise In DescTools: Tools for Descriptive Statistics

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

 ```1 2 3 4 5 6 7``` ```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>

`ave`, `tapply`, `aggregate`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21``` ```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, Rank, ties.method="dense") 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 ```