With mutate() you can do 3 things:

  • Add new columns

  • Modify existing columns

  • Delete columns

mutate(
  .df,
  ...,
  .by = NULL,
  .keep = c("all", "used", "unused", "none"),
  .before = NULL,
  .after = NULL
)

Arguments

.df

A data.frame or data.table

...

Columns to add/modify

.by

Columns to group by

.keep

experimental: This is an experimental argument that allows you to control which columns from .df are retained in the output:

  • "all", the default, retains all variables.

  • "used" keeps any variables used to make new variables; it's useful for checking your work as it displays inputs and outputs side-by-side.

  • "unused" keeps only existing variables not used to make new variables.

  • "none", only keeps grouping keys (like transmute()).

.before, .after

Optionally indicate where new columns should be placed. Defaults to the right side of the data frame.

Examples

df <- data.table(
  a = 1:3,
  b = 4:6,
  c = c("a", "a", "b")
)

df %>%
  mutate(double_a = a * 2,
         a_plus_b = a + b)
#> # A tidytable: 3 × 5
#>       a     b c     double_a a_plus_b
#>   <int> <int> <chr>    <dbl>    <int>
#> 1     1     4 a            2        5
#> 2     2     5 a            4        7
#> 3     3     6 b            6        9

df %>%
  mutate(double_a = a * 2,
         avg_a = mean(a),
         .by = c)
#> # A tidytable: 3 × 5
#>       a     b c     double_a avg_a
#>   <int> <int> <chr>    <dbl> <dbl>
#> 1     1     4 a            2   1.5
#> 2     2     5 a            4   1.5
#> 3     3     6 b            6   3  

df %>%
  mutate(double_a = a * 2, .keep = "used")
#> # A tidytable: 3 × 2
#>       a double_a
#>   <int>    <dbl>
#> 1     1        2
#> 2     2        4
#> 3     3        6

df %>%
  mutate(double_a = a * 2, .after = a)
#> # A tidytable: 3 × 4
#>       a double_a     b c    
#>   <int>    <dbl> <int> <chr>
#> 1     1        2     4 a    
#> 2     2        4     5 a    
#> 3     3        6     6 b