These functions return information about the "current" group or "current" variable, so only work inside specific contexts like summarise() and mutate()

  • n() gives the current group size.

  • cur_data() gives the current data for the current group (excluding grouping variables).

  • cur_data_all() gives the current data for the current group (including grouping variables)

  • cur_group() gives the group keys, a tibble with one row and one column for each grouping variable.

  • cur_group_id() gives a unique numeric identifier for the current group.

  • cur_group_rows() gives the row indices for the current group.

  • cur_column() gives the name of the current column (in across() only).

See group_data() for equivalent functions that return values for all groups.

n()

cur_data()

cur_data_all()

cur_group()

cur_group_id()

cur_group_rows()

cur_column()

data.table

If you're familiar with data.table:

  • cur_data() <-> .SD

  • cur_group_id() <-> .GRP

  • cur_group() <-> .BY

  • cur_group_rows() <-> .I

Examples

df <- tibble( g = sample(rep(letters[1:3], 1:3)), x = runif(6), y = runif(6) ) gf <- df %>% group_by(g) gf %>% summarise(n = n())
#> # A tibble: 3 x 2 #> g n #> <chr> <int> #> 1 a 1 #> 2 b 2 #> 3 c 3
gf %>% mutate(id = cur_group_id())
#> # A tibble: 6 x 4 #> # Groups: g [3] #> g x y id #> <chr> <dbl> <dbl> <int> #> 1 b 0.258 0.885 2 #> 2 b 0.712 0.827 2 #> 3 c 0.968 0.726 3 #> 4 c 0.661 0.367 3 #> 5 a 0.796 0.523 1 #> 6 c 0.0732 0.470 3
gf %>% summarise(row = cur_group_rows())
#> `summarise()` has grouped output by 'g'. You can override using the `.groups` argument.
#> # A tibble: 6 x 2 #> # Groups: g [3] #> g row #> <chr> <int> #> 1 a 5 #> 2 b 1 #> 3 b 2 #> 4 c 3 #> 5 c 4 #> 6 c 6
gf %>% summarise(data = list(cur_group()))
#> # A tibble: 3 x 2 #> g data #> <chr> <list> #> 1 a <tibble [1 × 1]> #> 2 b <tibble [1 × 1]> #> 3 c <tibble [1 × 1]>
gf %>% summarise(data = list(cur_data()))
#> # A tibble: 3 x 2 #> g data #> <chr> <list> #> 1 a <tibble [1 × 2]> #> 2 b <tibble [2 × 2]> #> 3 c <tibble [3 × 2]>
gf %>% summarise(data = list(cur_data_all()))
#> # A tibble: 3 x 2 #> g data #> <chr> <list> #> 1 a <tibble [1 × 3]> #> 2 b <tibble [2 × 3]> #> 3 c <tibble [3 × 3]>
gf %>% mutate(across(everything(), ~ paste(cur_column(), round(.x, 2))))
#> # A tibble: 6 x 3 #> # Groups: g [3] #> g x y #> <chr> <chr> <chr> #> 1 b x 0.26 y 0.88 #> 2 b x 0.71 y 0.83 #> 3 c x 0.97 y 0.73 #> 4 c x 0.66 y 0.37 #> 5 a x 0.8 y 0.52 #> 6 c x 0.07 y 0.47