Split a data frame by groups into subsets or data panel. Very similar to the function df_nest_by(). The only difference is that, it adds label to each data subset. Labels are the combination of the grouping variable levels. The column holding labels are named "label".

df_split_by(
  data,
  ...,
  vars = NULL,
  label_col = "label",
  labeller = df_label_both,
  sep = c(", ", ":")
)

Arguments

data

a data frame

...

One or more unquoted expressions (or variable names) separated by commas. Used as grouping variables.

vars

a character vector containing the grouping variables of interest.

label_col

column to hold the label of the data subsets. Default column name is "label".

labeller

A function that takes a data frame, the grouping variables, label_col and label_sep arguments, and add labels into the data frame. Example of possible values are: df_label_both() and df_label_value().

sep

String separating labelling variables and values. Should be of length 2 in the function df_label_both(). 1) One sep is used to separate groups, for example ','; 2) The other sep between group name and levels; for example ':'.

Value

A tbl with one row per unique combination of the grouping variables. The first columns are the grouping variables, followed by a list column of tibbles with matching rows of the remaining columns, and a column named label, containing labels.

Examples

# Split a data frame # ::::::::::::::::::::::::::::::::::::::::::::::::: # Create a grouped data res <- ToothGrowth %>% df_split_by(dose, supp) res
#> # A tibble: 6 x 4 #> supp dose data label #> <fct> <dbl> <list> <fct> #> 1 VC 0.5 <tibble [10 × 2]> dose:0.5, supp:OJ #> 2 VC 1 <tibble [10 × 2]> dose:0.5, supp:VC #> 3 VC 2 <tibble [10 × 2]> dose:1, supp:OJ #> 4 OJ 0.5 <tibble [10 × 2]> dose:1, supp:VC #> 5 OJ 1 <tibble [10 × 2]> dose:2, supp:OJ #> 6 OJ 2 <tibble [10 × 2]> dose:2, supp:VC
# Show subsets res$data
#> [[1]] #> # A tibble: 10 x 2 #> len label #> <dbl> <fct> #> 1 4.2 dose:0.5, supp:OJ #> 2 11.5 dose:0.5, supp:OJ #> 3 7.3 dose:0.5, supp:OJ #> 4 5.8 dose:0.5, supp:OJ #> 5 6.4 dose:0.5, supp:OJ #> 6 10 dose:0.5, supp:OJ #> 7 11.2 dose:0.5, supp:OJ #> 8 11.2 dose:0.5, supp:OJ #> 9 5.2 dose:0.5, supp:OJ #> 10 7 dose:0.5, supp:OJ #> #> [[2]] #> # A tibble: 10 x 2 #> len label #> <dbl> <fct> #> 1 16.5 dose:0.5, supp:VC #> 2 16.5 dose:0.5, supp:VC #> 3 15.2 dose:0.5, supp:VC #> 4 17.3 dose:0.5, supp:VC #> 5 22.5 dose:0.5, supp:VC #> 6 17.3 dose:0.5, supp:VC #> 7 13.6 dose:0.5, supp:VC #> 8 14.5 dose:0.5, supp:VC #> 9 18.8 dose:0.5, supp:VC #> 10 15.5 dose:0.5, supp:VC #> #> [[3]] #> # A tibble: 10 x 2 #> len label #> <dbl> <fct> #> 1 23.6 dose:1, supp:OJ #> 2 18.5 dose:1, supp:OJ #> 3 33.9 dose:1, supp:OJ #> 4 25.5 dose:1, supp:OJ #> 5 26.4 dose:1, supp:OJ #> 6 32.5 dose:1, supp:OJ #> 7 26.7 dose:1, supp:OJ #> 8 21.5 dose:1, supp:OJ #> 9 23.3 dose:1, supp:OJ #> 10 29.5 dose:1, supp:OJ #> #> [[4]] #> # A tibble: 10 x 2 #> len label #> <dbl> <fct> #> 1 15.2 dose:1, supp:VC #> 2 21.5 dose:1, supp:VC #> 3 17.6 dose:1, supp:VC #> 4 9.7 dose:1, supp:VC #> 5 14.5 dose:1, supp:VC #> 6 10 dose:1, supp:VC #> 7 8.2 dose:1, supp:VC #> 8 9.4 dose:1, supp:VC #> 9 16.5 dose:1, supp:VC #> 10 9.7 dose:1, supp:VC #> #> [[5]] #> # A tibble: 10 x 2 #> len label #> <dbl> <fct> #> 1 19.7 dose:2, supp:OJ #> 2 23.3 dose:2, supp:OJ #> 3 23.6 dose:2, supp:OJ #> 4 26.4 dose:2, supp:OJ #> 5 20 dose:2, supp:OJ #> 6 25.2 dose:2, supp:OJ #> 7 25.8 dose:2, supp:OJ #> 8 21.2 dose:2, supp:OJ #> 9 14.5 dose:2, supp:OJ #> 10 27.3 dose:2, supp:OJ #> #> [[6]] #> # A tibble: 10 x 2 #> len label #> <dbl> <fct> #> 1 25.5 dose:2, supp:VC #> 2 26.4 dose:2, supp:VC #> 3 22.4 dose:2, supp:VC #> 4 24.5 dose:2, supp:VC #> 5 24.8 dose:2, supp:VC #> 6 30.9 dose:2, supp:VC #> 7 26.4 dose:2, supp:VC #> 8 27.3 dose:2, supp:VC #> 9 29.4 dose:2, supp:VC #> 10 23 dose:2, supp:VC #>
# Add panel/subset labels res <- ToothGrowth %>% df_split_by(dose, supp) res
#> # A tibble: 6 x 4 #> supp dose data label #> <fct> <dbl> <list> <fct> #> 1 VC 0.5 <tibble [10 × 2]> dose:0.5, supp:OJ #> 2 VC 1 <tibble [10 × 2]> dose:0.5, supp:VC #> 3 VC 2 <tibble [10 × 2]> dose:1, supp:OJ #> 4 OJ 0.5 <tibble [10 × 2]> dose:1, supp:VC #> 5 OJ 1 <tibble [10 × 2]> dose:2, supp:OJ #> 6 OJ 2 <tibble [10 × 2]> dose:2, supp:VC