group_keys {dplyr} | R Documentation

## Split data frame by groups

### Description

Split data frame by groups

### Usage

    group_keys(.tbl, ...)

    group_split(.tbl, ..., keep = TRUE)

### Arguments

`.tbl` | A tbl
`...` | Grouping specification, forwarded to `group_by()`
`keep` | Should the grouping columns be kept

### Details

`group_split()` works like `base::split()` but

- it uses the grouping structure from `group_by()` and therefore is subject to the data mask

- it does not name the elements of the list based on the grouping as this typically loses information and is confusing.

`group_keys()` explains the grouping structure, by returning a data frame that has one row per group and one column per grouping variable.

### Value

- `group_split()` returns a list of tibbles. Each tibble contains the rows of `.tbl` for the associated group and all the columns, including the grouping variables.

- `group_keys()` returns a tibble with one row per group, and one column per grouping variable

### Grouped data frames

The primary use case for `group_split()` is with already grouped data frames, typically a result of `group_by()`. In this case `group_split()` only uses the first argument, the grouped tibble, and warns when `...` is used.

Because some of these groups may be empty, it is best paried with `group_keys()` which identifies the representatives of each grouping variable for the group.

### Ungrouped data frames

When used on ungrouped data frames, `group_split()` and `group_keys()` forwards the `...` to `group_by()` before the split, therefore the `...` are subject to the data mask.

Using these functions on an ungrouped data frame only makes sense if you need only one or the other, because otherwise the grouping algorithm is performed each time.

### Rowwise data frames

`group_split()` returns a list of one-row tibbles is returned, and the `...` are ignored and warned against

### See Also

Other grouping functions: `group_by_all`, `group_by`, `group_indices`, `group_map`, `group_nest`, `group_rows`, `group_size`, `group_trim`, `groups`

### Examples

    # ----- use case 1 : on an already grouped tibble
    ir <- iris %>%
      group_by(Species)

    group_split(ir)
    group_keys(ir)

    # this can be useful if the grouped data has been altered before the split
    ir <- iris %>%
      group_by(Species) %>%
      filter(Sepal.Length > mean(Sepal.Length))

    group_split(ir)
    group_keys(ir)

    # ----- use case 2: using a group_by() grouping specification

    # both group_split() and group_keys() have to perform the grouping
    # so it only makes sense to do this if you only need one or the other
    iris %>%
      group_split(Species)

    iris %>%
      group_keys(Species)

[Package dplyr version 0.8.0.1 Index]