Split a dataframe according to the levels of variables in the dataframe. Uses vparse() to interpret flexible input.

split_by(data., ..., omit = TRUE)

splitBy(formula, data, omit = TRUE)

# S3 method for class 'splitByData'
head(x, n = 6L, ...)

# S3 method for class 'splitByData'
tail(x, n = 6L, ...)

split_by.legacy(data, formula, drop = TRUE)

splitBy.legacy(formula, data = parent.frame(), drop = TRUE)

Arguments

data.

A data frame (or tibble) to split

...

Variables defining the groups

omit

If TRUE (default), group-defining variables are omitted in each split group

formula

A right hand sided formula (for the old interface)

data

A data frame (for the old interface)

x

A splitByData object.

n

An integer vector.

drop

Obsolete

Value

An object of class \"splitByData\" (a named list with group attributes)

Author

Søren Højsgaard, sorenh@math.aau.dk

Examples


split_by(CO2, ~Treatment+Type)
#>                 listentry  Treatment        Type
#> 1     chilled|Mississippi nonchilled      Quebec
#> 22         chilled|Quebec    chilled      Quebec
#> 43 nonchilled|Mississippi nonchilled Mississippi
#> 64      nonchilled|Quebec    chilled Mississippi
split_by(CO2, Treatment, Type)
#>                 listentry  Treatment        Type
#> 1     chilled|Mississippi nonchilled      Quebec
#> 22         chilled|Quebec    chilled      Quebec
#> 43 nonchilled|Mississippi nonchilled Mississippi
#> 64      nonchilled|Quebec    chilled Mississippi
split_by(CO2, c("Treatment", "Type"))
#>                 listentry  Treatment        Type
#> 1     chilled|Mississippi nonchilled      Quebec
#> 22         chilled|Quebec    chilled      Quebec
#> 43 nonchilled|Mississippi nonchilled Mississippi
#> 64      nonchilled|Quebec    chilled Mississippi
split_by(CO2, "Treatment", "Type")
#>                 listentry  Treatment        Type
#> 1     chilled|Mississippi nonchilled      Quebec
#> 22         chilled|Quebec    chilled      Quebec
#> 43 nonchilled|Mississippi nonchilled Mississippi
#> 64      nonchilled|Quebec    chilled Mississippi

x <- split_by(CO2, "Treatment", "Type")
head(x, 3)
#> $`chilled|Mississippi`
#>    Plant conc uptake
#> 64   Mc1   95   10.5
#> 65   Mc1  175   14.9
#> 66   Mc1  250   18.1
#> 
#> $`chilled|Quebec`
#>    Plant conc uptake
#> 22   Qc1   95   14.2
#> 23   Qc1  175   24.1
#> 24   Qc1  250   30.3
#> 
#> $`nonchilled|Mississippi`
#>    Plant conc uptake
#> 43   Mn1   95   10.6
#> 44   Mn1  175   19.2
#> 45   Mn1  250   26.2
#> 
#> $`nonchilled|Quebec`
#>   Plant conc uptake
#> 1   Qn1   95   16.0
#> 2   Qn1  175   30.4
#> 3   Qn1  250   34.8
#> 
tail(x, 3)
#> $`chilled|Mississippi`
#>    Plant conc uptake
#> 82   Mc3  500   17.9
#> 83   Mc3  675   18.9
#> 84   Mc3 1000   19.9
#> 
#> $`chilled|Quebec`
#>    Plant conc uptake
#> 40   Qc3  500   38.9
#> 41   Qc3  675   39.6
#> 42   Qc3 1000   41.4
#> 
#> $`nonchilled|Mississippi`
#>    Plant conc uptake
#> 61   Mn3  500   28.5
#> 62   Mn3  675   28.1
#> 63   Mn3 1000   27.8
#> 
#> $`nonchilled|Quebec`
#>    Plant conc uptake
#> 19   Qn3  500   42.9
#> 20   Qn3  675   43.9
#> 21   Qn3 1000   45.5
#> 

## Via wrapper:
foo2 <- function(x) {
 x <- rlang::enquo(x)
 split_by(CO2, !!x)
}
foo2(~Treatment)
#>     listentry  Treatment
#> 1     chilled nonchilled
#> 22 nonchilled    chilled

## The "Old" interface
splitBy(~Treatment + Type, CO2)
#>                 listentry  Treatment        Type
#> 1     chilled|Mississippi nonchilled      Quebec
#> 22         chilled|Quebec    chilled      Quebec
#> 43 nonchilled|Mississippi nonchilled Mississippi
#> 64      nonchilled|Quebec    chilled Mississippi
splitBy(~Treatment + Type, data=CO2)
#>                 listentry  Treatment        Type
#> 1     chilled|Mississippi nonchilled      Quebec
#> 22         chilled|Quebec    chilled      Quebec
#> 43 nonchilled|Mississippi nonchilled Mississippi
#> 64      nonchilled|Quebec    chilled Mississippi
splitBy(c("Treatment", "Type"), data=CO2)
#>                 listentry  Treatment        Type
#> 1     chilled|Mississippi nonchilled      Quebec
#> 22         chilled|Quebec    chilled      Quebec
#> 43 nonchilled|Mississippi nonchilled Mississippi
#> 64      nonchilled|Quebec    chilled Mississippi