R: Recursive Splitting

rsplit {collapse} | R Documentation

## Recursive Splitting

### Description

`rsplit` recursively splits a vector or data frame into subsets according to combinations of (multiple) vectors / factors - by default returning a (nested) list. If `flatten = TRUE`, the list is flattened yielding the same result as `split`. `rsplit` is implemented as a wrapper around `gsplit`, and faster than `split`.

### Usage

    rsplit(x, ...)

    ## Default S3 method:
    rsplit(x, fl, drop = TRUE, flatten = FALSE, use.names = TRUE, ...)

    ## S3 method for class 'data.frame'
    rsplit(x, by, drop = TRUE, flatten = FALSE, cols = NULL,
           keep.by = FALSE, simplify = TRUE, use.names = TRUE, ...)

### Arguments

`x` | a vector, data.frame or list.
`fl` | a vector / factor, `GRP` object, or list of vectors / factors used to split `x`.
`by` | data.frame method: Same as `fl`, but also allows one- or two-sided formulas i.e. `~ group1` or `var1 + var2 ~ group1 + group2`. See Examples.
`drop` | logical. `TRUE` removes unused levels or combinations of levels from factors before splitting; `FALSE` retains those combinations yielding empty list elements in the output.
`flatten` | logical. If `fl` is a list of vectors / factors, `TRUE` calls `GRP` on the list, creating a single grouping used for splitting; `FALSE` yields recursive splitting.
`use.names` | logical. `TRUE` returns a named list (like `split`); `FALSE` returns a plain list.
`cols` | data.frame method: Select columns to split using a function, column names, indices or a logical vector. Note: `cols` is ignored if a two-sided formula is passed to `by`.
`keep.by` | logical. If a formula is passed to `by`, then `TRUE` preserves the splitting (right-hand-side) variables in the data frame.
`simplify` | data.frame method: Logical. `TRUE` calls `rsplit.default` if a single column is split e.g. `rsplit(data, col1 ~ group1)` becomes the same as `rsplit(data$col1, data$group1)`.
`...` | further arguments passed to `GRP`. Sensible choices would be `sort = FALSE`, `decreasing = TRUE` or `na.last = FALSE`. Note that these options only apply if `fl` is not already a factor.

### Value

a (nested) list containing the subsets of `x`.

### See Also

`gsplit`, `rapply2d`, `unlist2d`, List Processing, Collapse Overview

### Examples

    rsplit(mtcars$mpg, mtcars$cyl)
    rsplit(mtcars, mtcars$cyl)

    rsplit(mtcars, mtcars[.c(cyl, vs, am)])
    rsplit(mtcars, ~ cyl + vs + am, keep.by = TRUE)  # Same thing
    rsplit(mtcars, ~ cyl + vs + am)

    rsplit(mtcars, ~ cyl + vs + am, flatten = TRUE)

    rsplit(mtcars, mpg ~ cyl)
    rsplit(mtcars, mpg ~ cyl, simplify = FALSE)
    rsplit(mtcars, mpg + hp ~ cyl + vs + am)
    rsplit(mtcars, mpg + hp ~ cyl + vs + am, keep.by = TRUE)

[Package collapse version 1.7.6 Index]