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 |

`FUN` |
Function to apply for each factor level combination. |

`formula` |
a formula of the form |

`data` |
an optional matrix or data frame (or similar: see |

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

`vnames` |
name for the new variables. |

`collapse` |
logical, determining if the results should be collapsed to groups. Default is |

`...` |
optional arguments to |

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

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

*DescTools*version 0.99.55 Index]