Skip to contents

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

  • n() gives the number of observations in the current group.

  • 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 single row data.frame containing a column for each grouping variable and its value.

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

  • cur_group_rows() gives the rows the groups appear in the data.

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

Usage

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

See also

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

Examples

df <- data.frame(
  g = sample(rep(letters[1:3], 1:3)),
  x = runif(6),
  y = runif(6),
  stringsAsFactors = FALSE
)
gf <- df %>% group_by(g)

gf %>% summarise(n = n())
#>   g n
#> 1 a 1
#> 2 b 2
#> 3 c 3

gf %>% mutate(id = cur_group_id())
#>   g         x          y id
#> 1 c 0.9835254 0.13807484  3
#> 2 c 0.5898376 0.08084496  3
#> 3 c 0.7591584 0.65598263  3
#> 4 b 0.8360753 0.60200386  2
#> 5 b 0.7628195 0.65699583  2
#> 6 a 0.4172699 0.32931716  1
gf %>% summarise(row = cur_group_rows())
#> `summarise()` has grouped output by 'g'. You can override using the `.groups` argument.
#>   g row
#> 1 a   6
#> 2 b   4
#> 3 b   5
#> 4 c   1
#> 5 c   2
#> 6 c   3
gf %>% summarise(data = list(cur_group()))
#>   g data
#> 1 a    a
#> 2 b    b
#> 3 c    c
gf %>% summarise(data = list(cur_data()))
#>   g                                                                   data
#> 1 a                                                   0.4172699, 0.3293172
#> 2 b                             0.8360753, 0.7628195, 0.6020039, 0.6569958
#> 3 c 0.98352541, 0.58983756, 0.75915838, 0.13807484, 0.08084496, 0.65598263
gf %>% summarise(data = list(cur_data_all()))
#>   g
#> 1 a
#> 2 b
#> 3 c
#>                                                                                                                         data
#> 1                                                                                    a, 0.417269926285371, 0.329317163676023
#> 2                                           b, b, 0.836075305938721, 0.762819469673559, 0.602003859123215, 0.656995829660445
#> 3 c, c, c, 0.983525407966226, 0.589837556472048, 0.759158379863948, 0.138074840884656, 0.0808449615724385, 0.655982626136392

gf %>% mutate(across(everything(), ~ paste(cur_column(), round(.x, 2))))
#>   g      x      y
#> 1 c x 0.98 y 0.14
#> 2 c x 0.59 y 0.08
#> 3 c x 0.76 y 0.66
#> 4 b x 0.84  y 0.6
#> 5 b x 0.76 y 0.66
#> 6 a x 0.42 y 0.33