This function allows you to modify the grouping variables for a single operation.

with_groups(.data, .groups, .f, ...)

Arguments

.data

A data.frame.

.groups

<poor-select> One or more variables to group by. Unlike group_by(), you can only group by existing variables, and you can use poor-select syntax like c(x, y, z) to select multiple variables.

Use NULL to temporarily ungroup.

.f

A function to apply to regrouped data. Supports lambda-style ~ syntax.

...

Additional arguments passed on to .f.

Examples

df <- data.frame(g = c(1, 1, 2, 2, 3), x = runif(5)) df %>% with_groups(g, mutate, x_mean = mean(x))
#> g x x_mean #> 1 1 0.4563222 0.5071785 #> 2 1 0.5580347 0.5071785 #> 3 2 0.1692951 0.4796030 #> 4 2 0.7899110 0.4796030 #> 5 3 0.2674007 0.2674007
df %>% with_groups(g, ~ mutate(.x, x_mean = mean(x)))
#> g x x_mean #> 1 1 0.4563222 0.5071785 #> 2 1 0.5580347 0.5071785 #> 3 2 0.1692951 0.4796030 #> 4 2 0.7899110 0.4796030 #> 5 3 0.2674007 0.2674007
df %>% group_by(g) %>% with_groups(NULL, mutate, x_mean = mean(x))
#> g x x_mean #> 1 1 0.4563222 0.4481927 #> 2 1 0.5580347 0.4481927 #> 3 2 0.1692951 0.4481927 #> 4 2 0.7899110 0.4481927 #> 5 3 0.2674007 0.4481927
# NB: grouping can't be restored if you remove the grouping variables df %>% group_by(g) %>% with_groups(NULL, mutate, g = NULL)
#> x #> 1 0.4563222 #> 2 0.5580347 #> 3 0.1692951 #> 4 0.7899110 #> 5 0.2674007