Split a dataframe according to the levels of variables in the dataframe. The variables to split by can be given as a formula or as a character vector.

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

...

A character vector or, right hand sided formula or a listing of variables.

omit

Logical Should variables split on be omitted from the output. Defaults to TRUE.

formula

A character vector or a right hand sided formula.

x

An object.

n

A single integer. If positive or zero, size for the resulting object: number of elements for a vector (including lists), rows for a matrix or data frame or lines for a function. If negative, all but the "n" last/first number of elements of "x".

drop

Obsolete

Value

A list of dataframes.

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)
#>     listentry  Treatment
#> 1     chilled nonchilled
#> 22 nonchilled    chilled
x <- CO2 |> split_by(~Treatment)
head(x, 3)
#> $chilled
#>    Plant   Type conc uptake
#> 22   Qc1 Quebec   95   14.2
#> 23   Qc1 Quebec  175   24.1
#> 24   Qc1 Quebec  250   30.3
#> 
#> $nonchilled
#>   Plant   Type conc uptake
#> 1   Qn1 Quebec   95   16.0
#> 2   Qn1 Quebec  175   30.4
#> 3   Qn1 Quebec  250   34.8
#> 
tail(x, 3)
#> $chilled
#>    Plant        Type conc uptake
#> 82   Mc3 Mississippi  500   17.9
#> 83   Mc3 Mississippi  675   18.9
#> 84   Mc3 Mississippi 1000   19.9
#> 
#> $nonchilled
#>    Plant        Type conc uptake
#> 61   Mn3 Mississippi  500   28.5
#> 62   Mn3 Mississippi  675   28.1
#> 63   Mn3 Mississippi 1000   27.8
#> 

x <- CO2 |> split_by(~Treatment, omit=FALSE)
head(x, 3)
#> $chilled
#>    Plant   Type Treatment conc uptake
#> 22   Qc1 Quebec   chilled   95   14.2
#> 23   Qc1 Quebec   chilled  175   24.1
#> 24   Qc1 Quebec   chilled  250   30.3
#> 
#> $nonchilled
#>   Plant   Type  Treatment conc uptake
#> 1   Qn1 Quebec nonchilled   95   16.0
#> 2   Qn1 Quebec nonchilled  175   30.4
#> 3   Qn1 Quebec nonchilled  250   34.8
#> 
tail(x, 3)
#> $chilled
#>    Plant        Type Treatment conc uptake
#> 82   Mc3 Mississippi   chilled  500   17.9
#> 83   Mc3 Mississippi   chilled  675   18.9
#> 84   Mc3 Mississippi   chilled 1000   19.9
#> 
#> $nonchilled
#>    Plant        Type  Treatment conc uptake
#> 61   Mn3 Mississippi nonchilled  500   28.5
#> 62   Mn3 Mississippi nonchilled  675   28.1
#> 63   Mn3 Mississippi nonchilled 1000   27.8
#> 

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