Aggregate a set of variables by another set of variables with a specific function

e_table_aggregate(
  dat,
  var_names_by,
  var_names_aggregate,
  func_aggregate = list(sum),
  .groups = c("drop", "keep")[1]
)

Arguments

dat

data.frame or tibble

var_names_by

list of variable names to group by

var_names_aggregate

list of variable names to aggregate

func_aggregate

a function (e.g., sum) to aggregate all variables by, or a list of functions to aggregate each variable by

.groups

drops or keeps groups

Value

aggregated data

Examples

e_table_aggregate(
    dat                 = dat_mtcars_e
  , var_names_by        = c("cyl")
  , var_names_aggregate = c("disp", "hp", "drat")
  , func_aggregate      = mean
  )
#> # A tibble: 3 × 4
#>   cyl    disp    hp  drat
#>   <fct> <dbl> <dbl> <dbl>
#> 1 four   105.  82.6  4.07
#> 2 six    183. 122.   3.59
#> 3 eight  353. 209.   3.23
e_table_aggregate(
    dat                 = dat_mtcars_e
  , var_names_by        = c("cyl", "am")
  , var_names_aggregate = c("disp", "hp", "drat", "wt", "qsec")
  , func_aggregate      = list(sum, sum, mean, mean, sum)
  )
#> # A tibble: 6 × 7
#>   cyl   am         disp    hp  drat    wt  qsec
#>   <fct> <fct>     <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 four  automatic  408.   254  3.77  2.94  62.9
#> 2 four  manual     749.   655  4.18  2.04 148. 
#> 3 six   automatic  818.   461  3.42  3.39  76.9
#> 4 six   manual     465    395  3.81  2.76  49.0
#> 5 eight automatic 4291.  2330  3.12  4.10 206. 
#> 6 eight manual     652    599  3.88  3.37  29.1

# assign variables and functions in a list
list_aggregate_var_func <-
  list(
    `disp` = sum
  , `hp`   = sum
  , `drat` = mean
  , `wt`   = mean
  , `qsec` = sum
  )
e_table_aggregate(
    dat                 = dat_mtcars_e
  , var_names_by        = c("cyl", "am")
  , var_names_aggregate = list_aggregate_var_func %>% names()
  , func_aggregate      = list_aggregate_var_func
  )
#> # A tibble: 6 × 7
#>   cyl   am         disp    hp  drat    wt  qsec
#>   <fct> <fct>     <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 four  automatic  408.   254  3.77  2.94  62.9
#> 2 four  manual     749.   655  4.18  2.04 148. 
#> 3 six   automatic  818.   461  3.42  3.39  76.9
#> 4 six   manual     465    395  3.81  2.76  49.0
#> 5 eight automatic 4291.  2330  3.12  4.10 206. 
#> 6 eight manual     652    599  3.88  3.37  29.1