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()
If you're familiar with data.table:
cur_data()
<-> .SD
cur_group_id()
<-> .GRP
cur_group()
<-> .BY
cur_group_rows()
<-> .I
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 × 2
#> g n
#> <chr> <int>
#> 1 a 1
#> 2 b 2
#> 3 c 3
gf %>% mutate(id = cur_group_id())
#> # A tibble: 6 × 4
#> # Groups: g [3]
#> g x y id
#> <chr> <dbl> <dbl> <int>
#> 1 b 0.528 0.939 2
#> 2 c 0.237 0.714 3
#> 3 b 0.743 0.178 2
#> 4 a 0.0451 0.334 1
#> 5 c 0.912 0.0785 3
#> 6 c 0.110 0.885 3
gf %>% summarise(row = cur_group_rows())
#> `summarise()` has grouped output by 'g'. You can override using the `.groups`
#> argument.
#> # A tibble: 6 × 2
#> # Groups: g [3]
#> g row
#> <chr> <int>
#> 1 a 4
#> 2 b 1
#> 3 b 3
#> 4 c 2
#> 5 c 5
#> 6 c 6
gf %>% summarise(data = list(cur_group()))
#> # A tibble: 3 × 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 × 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 × 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 × 3
#> # Groups: g [3]
#> g x y
#> <chr> <chr> <chr>
#> 1 b x 0.53 y 0.94
#> 2 c x 0.24 y 0.71
#> 3 b x 0.74 y 0.18
#> 4 a x 0.05 y 0.33
#> 5 c x 0.91 y 0.08
#> 6 c x 0.11 y 0.89