mutate() adds new variables and preserves existing ones; transmute() adds new variables and drops existing ones. Both functions preserve the number of rows of the input. New variables overwrite existing variables of the same name.

mutate_when integrates mutate and case_when in dplyr and make a new tidy verb for data.table. mutate_vars is a super function to do updates in specific columns according to conditions.

If you mutate a data.table, it is forever changed. No copies made, which is efficient, but should be used with caution. If you still want the keep the original data.table, use copy first.

mutate(.data, ..., by)

transmute(.data, ..., by)

mutate_when(.data, when, ..., by)

mutate_vars(.data, .cols = NULL, .func, ..., by)

Arguments

.data

A data.table

...

Name-value pairs of expressions

by

(Optional) Mutate by what group?

when

An object which can be coerced to logical mode

.cols

Any types that can be accepted by select_dt.

.func

Function to be run within each column, should return a value or vectors with same length.

Value

A data.table

Examples

  # Newly created variables are available immediately
  a = as.data.table(mtcars)
  copy(a) %>% mutate(cyl2 = cyl * 2)
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
#>     <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
#>  1:  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4    12
#>  2:  21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4    12
#>  3:  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     8
#>  4:  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1    12
#>  5:  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2    16
#>  6:  18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1    12
#>  7:  14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4    16
#>  8:  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2     8
#>  9:  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2     8
#> 10:  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4    12
#> 11:  17.8     6 167.6   123  3.92 3.440 18.90     1     0     4     4    12
#> 12:  16.4     8 275.8   180  3.07 4.070 17.40     0     0     3     3    16
#> 13:  17.3     8 275.8   180  3.07 3.730 17.60     0     0     3     3    16
#> 14:  15.2     8 275.8   180  3.07 3.780 18.00     0     0     3     3    16
#> 15:  10.4     8 472.0   205  2.93 5.250 17.98     0     0     3     4    16
#> 16:  10.4     8 460.0   215  3.00 5.424 17.82     0     0     3     4    16
#> 17:  14.7     8 440.0   230  3.23 5.345 17.42     0     0     3     4    16
#> 18:  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1     8
#> 19:  30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2     8
#> 20:  33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1     8
#> 21:  21.5     4 120.1    97  3.70 2.465 20.01     1     0     3     1     8
#> 22:  15.5     8 318.0   150  2.76 3.520 16.87     0     0     3     2    16
#> 23:  15.2     8 304.0   150  3.15 3.435 17.30     0     0     3     2    16
#> 24:  13.3     8 350.0   245  3.73 3.840 15.41     0     0     3     4    16
#> 25:  19.2     8 400.0   175  3.08 3.845 17.05     0     0     3     2    16
#> 26:  27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1     8
#> 27:  26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2     8
#> 28:  30.4     4  95.1   113  3.77 1.513 16.90     1     1     5     2     8
#> 29:  15.8     8 351.0   264  4.22 3.170 14.50     0     1     5     4    16
#> 30:  19.7     6 145.0   175  3.62 2.770 15.50     0     1     5     6    12
#> 31:  15.0     8 301.0   335  3.54 3.570 14.60     0     1     5     8    16
#> 32:  21.4     4 121.0   109  4.11 2.780 18.60     1     1     4     2     8
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
  a
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>     <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
#>  1:  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4
#>  2:  21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4
#>  3:  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1
#>  4:  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1
#>  5:  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2
#>  6:  18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1
#>  7:  14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4
#>  8:  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2
#>  9:  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2
#> 10:  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4
#> 11:  17.8     6 167.6   123  3.92 3.440 18.90     1     0     4     4
#> 12:  16.4     8 275.8   180  3.07 4.070 17.40     0     0     3     3
#> 13:  17.3     8 275.8   180  3.07 3.730 17.60     0     0     3     3
#> 14:  15.2     8 275.8   180  3.07 3.780 18.00     0     0     3     3
#> 15:  10.4     8 472.0   205  2.93 5.250 17.98     0     0     3     4
#> 16:  10.4     8 460.0   215  3.00 5.424 17.82     0     0     3     4
#> 17:  14.7     8 440.0   230  3.23 5.345 17.42     0     0     3     4
#> 18:  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1
#> 19:  30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2
#> 20:  33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1
#> 21:  21.5     4 120.1    97  3.70 2.465 20.01     1     0     3     1
#> 22:  15.5     8 318.0   150  2.76 3.520 16.87     0     0     3     2
#> 23:  15.2     8 304.0   150  3.15 3.435 17.30     0     0     3     2
#> 24:  13.3     8 350.0   245  3.73 3.840 15.41     0     0     3     4
#> 25:  19.2     8 400.0   175  3.08 3.845 17.05     0     0     3     2
#> 26:  27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1
#> 27:  26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2
#> 28:  30.4     4  95.1   113  3.77 1.513 16.90     1     1     5     2
#> 29:  15.8     8 351.0   264  4.22 3.170 14.50     0     1     5     4
#> 30:  19.7     6 145.0   175  3.62 2.770 15.50     0     1     5     6
#> 31:  15.0     8 301.0   335  3.54 3.570 14.60     0     1     5     8
#> 32:  21.4     4 121.0   109  4.11 2.780 18.60     1     1     4     2
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb

  # change forever
  a %>% mutate(cyl2 = cyl * 2)
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
#>     <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
#>  1:  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4    12
#>  2:  21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4    12
#>  3:  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     8
#>  4:  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1    12
#>  5:  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2    16
#>  6:  18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1    12
#>  7:  14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4    16
#>  8:  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2     8
#>  9:  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2     8
#> 10:  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4    12
#> 11:  17.8     6 167.6   123  3.92 3.440 18.90     1     0     4     4    12
#> 12:  16.4     8 275.8   180  3.07 4.070 17.40     0     0     3     3    16
#> 13:  17.3     8 275.8   180  3.07 3.730 17.60     0     0     3     3    16
#> 14:  15.2     8 275.8   180  3.07 3.780 18.00     0     0     3     3    16
#> 15:  10.4     8 472.0   205  2.93 5.250 17.98     0     0     3     4    16
#> 16:  10.4     8 460.0   215  3.00 5.424 17.82     0     0     3     4    16
#> 17:  14.7     8 440.0   230  3.23 5.345 17.42     0     0     3     4    16
#> 18:  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1     8
#> 19:  30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2     8
#> 20:  33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1     8
#> 21:  21.5     4 120.1    97  3.70 2.465 20.01     1     0     3     1     8
#> 22:  15.5     8 318.0   150  2.76 3.520 16.87     0     0     3     2    16
#> 23:  15.2     8 304.0   150  3.15 3.435 17.30     0     0     3     2    16
#> 24:  13.3     8 350.0   245  3.73 3.840 15.41     0     0     3     4    16
#> 25:  19.2     8 400.0   175  3.08 3.845 17.05     0     0     3     2    16
#> 26:  27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1     8
#> 27:  26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2     8
#> 28:  30.4     4  95.1   113  3.77 1.513 16.90     1     1     5     2     8
#> 29:  15.8     8 351.0   264  4.22 3.170 14.50     0     1     5     4    16
#> 30:  19.7     6 145.0   175  3.62 2.770 15.50     0     1     5     6    12
#> 31:  15.0     8 301.0   335  3.54 3.570 14.60     0     1     5     8    16
#> 32:  21.4     4 121.0   109  4.11 2.780 18.60     1     1     4     2     8
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
  a
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
#>     <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
#>  1:  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4    12
#>  2:  21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4    12
#>  3:  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     8
#>  4:  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1    12
#>  5:  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2    16
#>  6:  18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1    12
#>  7:  14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4    16
#>  8:  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2     8
#>  9:  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2     8
#> 10:  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4    12
#> 11:  17.8     6 167.6   123  3.92 3.440 18.90     1     0     4     4    12
#> 12:  16.4     8 275.8   180  3.07 4.070 17.40     0     0     3     3    16
#> 13:  17.3     8 275.8   180  3.07 3.730 17.60     0     0     3     3    16
#> 14:  15.2     8 275.8   180  3.07 3.780 18.00     0     0     3     3    16
#> 15:  10.4     8 472.0   205  2.93 5.250 17.98     0     0     3     4    16
#> 16:  10.4     8 460.0   215  3.00 5.424 17.82     0     0     3     4    16
#> 17:  14.7     8 440.0   230  3.23 5.345 17.42     0     0     3     4    16
#> 18:  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1     8
#> 19:  30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2     8
#> 20:  33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1     8
#> 21:  21.5     4 120.1    97  3.70 2.465 20.01     1     0     3     1     8
#> 22:  15.5     8 318.0   150  2.76 3.520 16.87     0     0     3     2    16
#> 23:  15.2     8 304.0   150  3.15 3.435 17.30     0     0     3     2    16
#> 24:  13.3     8 350.0   245  3.73 3.840 15.41     0     0     3     4    16
#> 25:  19.2     8 400.0   175  3.08 3.845 17.05     0     0     3     2    16
#> 26:  27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1     8
#> 27:  26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2     8
#> 28:  30.4     4  95.1   113  3.77 1.513 16.90     1     1     5     2     8
#> 29:  15.8     8 351.0   264  4.22 3.170 14.50     0     1     5     4    16
#> 30:  19.7     6 145.0   175  3.62 2.770 15.50     0     1     5     6    12
#> 31:  15.0     8 301.0   335  3.54 3.570 14.60     0     1     5     8    16
#> 32:  21.4     4 121.0   109  4.11 2.780 18.60     1     1     4     2     8
#>       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2

  # You can also use mutate() to remove variables and
  # modify existing variables
  a %>% mutate(
    mpg = NULL,
    disp = disp * 0.0163871 # convert to litres
  )
#>       cyl     disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
#>     <num>    <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
#>  1:     6 2.621936   110  3.90 2.620 16.46     0     1     4     4    12
#>  2:     6 2.621936   110  3.90 2.875 17.02     0     1     4     4    12
#>  3:     4 1.769807    93  3.85 2.320 18.61     1     1     4     1     8
#>  4:     6 4.227872   110  3.08 3.215 19.44     1     0     3     1    12
#>  5:     8 5.899356   175  3.15 3.440 17.02     0     0     3     2    16
#>  6:     6 3.687098   105  2.76 3.460 20.22     1     0     3     1    12
#>  7:     8 5.899356   245  3.21 3.570 15.84     0     0     3     4    16
#>  8:     4 2.403988    62  3.69 3.190 20.00     1     0     4     2     8
#>  9:     4 2.307304    95  3.92 3.150 22.90     1     0     4     2     8
#> 10:     6 2.746478   123  3.92 3.440 18.30     1     0     4     4    12
#> 11:     6 2.746478   123  3.92 3.440 18.90     1     0     4     4    12
#> 12:     8 4.519562   180  3.07 4.070 17.40     0     0     3     3    16
#> 13:     8 4.519562   180  3.07 3.730 17.60     0     0     3     3    16
#> 14:     8 4.519562   180  3.07 3.780 18.00     0     0     3     3    16
#> 15:     8 7.734711   205  2.93 5.250 17.98     0     0     3     4    16
#> 16:     8 7.538066   215  3.00 5.424 17.82     0     0     3     4    16
#> 17:     8 7.210324   230  3.23 5.345 17.42     0     0     3     4    16
#> 18:     4 1.289665    66  4.08 2.200 19.47     1     1     4     1     8
#> 19:     4 1.240503    52  4.93 1.615 18.52     1     1     4     2     8
#> 20:     4 1.165123    65  4.22 1.835 19.90     1     1     4     1     8
#> 21:     4 1.968091    97  3.70 2.465 20.01     1     0     3     1     8
#> 22:     8 5.211098   150  2.76 3.520 16.87     0     0     3     2    16
#> 23:     8 4.981678   150  3.15 3.435 17.30     0     0     3     2    16
#> 24:     8 5.735485   245  3.73 3.840 15.41     0     0     3     4    16
#> 25:     8 6.554840   175  3.08 3.845 17.05     0     0     3     2    16
#> 26:     4 1.294581    66  4.08 1.935 18.90     1     1     4     1     8
#> 27:     4 1.971368    91  4.43 2.140 16.70     0     1     5     2     8
#> 28:     4 1.558413   113  3.77 1.513 16.90     1     1     5     2     8
#> 29:     8 5.751872   264  4.22 3.170 14.50     0     1     5     4    16
#> 30:     6 2.376130   175  3.62 2.770 15.50     0     1     5     6    12
#> 31:     8 4.932517   335  3.54 3.570 14.60     0     1     5     8    16
#> 32:     4 1.982839   109  4.11 2.780 18.60     1     1     4     2     8
#>       cyl     disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2

  a %>% transmute(cyl,one = 1)
#>       cyl   one
#>     <num> <num>
#>  1:     6     1
#>  2:     6     1
#>  3:     4     1
#>  4:     6     1
#>  5:     8     1
#>  6:     6     1
#>  7:     8     1
#>  8:     4     1
#>  9:     4     1
#> 10:     6     1
#> 11:     6     1
#> 12:     8     1
#> 13:     8     1
#> 14:     8     1
#> 15:     8     1
#> 16:     8     1
#> 17:     8     1
#> 18:     4     1
#> 19:     4     1
#> 20:     4     1
#> 21:     4     1
#> 22:     8     1
#> 23:     8     1
#> 24:     8     1
#> 25:     8     1
#> 26:     4     1
#> 27:     4     1
#> 28:     4     1
#> 29:     8     1
#> 30:     6     1
#> 31:     8     1
#> 32:     4     1
#>       cyl   one
  a
#>       cyl     disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2
#>     <num>    <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
#>  1:     6 2.621936   110  3.90 2.620 16.46     0     1     4     4    12
#>  2:     6 2.621936   110  3.90 2.875 17.02     0     1     4     4    12
#>  3:     4 1.769807    93  3.85 2.320 18.61     1     1     4     1     8
#>  4:     6 4.227872   110  3.08 3.215 19.44     1     0     3     1    12
#>  5:     8 5.899356   175  3.15 3.440 17.02     0     0     3     2    16
#>  6:     6 3.687098   105  2.76 3.460 20.22     1     0     3     1    12
#>  7:     8 5.899356   245  3.21 3.570 15.84     0     0     3     4    16
#>  8:     4 2.403988    62  3.69 3.190 20.00     1     0     4     2     8
#>  9:     4 2.307304    95  3.92 3.150 22.90     1     0     4     2     8
#> 10:     6 2.746478   123  3.92 3.440 18.30     1     0     4     4    12
#> 11:     6 2.746478   123  3.92 3.440 18.90     1     0     4     4    12
#> 12:     8 4.519562   180  3.07 4.070 17.40     0     0     3     3    16
#> 13:     8 4.519562   180  3.07 3.730 17.60     0     0     3     3    16
#> 14:     8 4.519562   180  3.07 3.780 18.00     0     0     3     3    16
#> 15:     8 7.734711   205  2.93 5.250 17.98     0     0     3     4    16
#> 16:     8 7.538066   215  3.00 5.424 17.82     0     0     3     4    16
#> 17:     8 7.210324   230  3.23 5.345 17.42     0     0     3     4    16
#> 18:     4 1.289665    66  4.08 2.200 19.47     1     1     4     1     8
#> 19:     4 1.240503    52  4.93 1.615 18.52     1     1     4     2     8
#> 20:     4 1.165123    65  4.22 1.835 19.90     1     1     4     1     8
#> 21:     4 1.968091    97  3.70 2.465 20.01     1     0     3     1     8
#> 22:     8 5.211098   150  2.76 3.520 16.87     0     0     3     2    16
#> 23:     8 4.981678   150  3.15 3.435 17.30     0     0     3     2    16
#> 24:     8 5.735485   245  3.73 3.840 15.41     0     0     3     4    16
#> 25:     8 6.554840   175  3.08 3.845 17.05     0     0     3     2    16
#> 26:     4 1.294581    66  4.08 1.935 18.90     1     1     4     1     8
#> 27:     4 1.971368    91  4.43 2.140 16.70     0     1     5     2     8
#> 28:     4 1.558413   113  3.77 1.513 16.90     1     1     5     2     8
#> 29:     8 5.751872   264  4.22 3.170 14.50     0     1     5     4    16
#> 30:     6 2.376130   175  3.62 2.770 15.50     0     1     5     6    12
#> 31:     8 4.932517   335  3.54 3.570 14.60     0     1     5     8    16
#> 32:     4 1.982839   109  4.11 2.780 18.60     1     1     4     2     8
#>       cyl     disp    hp  drat    wt  qsec    vs    am  gear  carb  cyl2


 iris[3:8,] %>%
   as.data.table() %>%
   mutate_when(Petal.Width == .2,
               one = 1,Sepal.Length=2)
#> Index: <Petal.Width>
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species   one
#>           <num>       <num>        <num>       <num>  <fctr> <num>
#> 1:          2.0         3.2          1.3         0.2  setosa     1
#> 2:          2.0         3.1          1.5         0.2  setosa     1
#> 3:          2.0         3.6          1.4         0.2  setosa     1
#> 4:          5.4         3.9          1.7         0.4  setosa    NA
#> 5:          4.6         3.4          1.4         0.3  setosa    NA
#> 6:          2.0         3.4          1.5         0.2  setosa     1

 iris[3:8,] %>%
   as.data.table() %>%
   mutate_vars("Pe",scale)
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#>           <num>       <num>        <num>       <num>  <fctr>
#> 1:          4.7         3.2    -1.219875  -0.5976143  setosa
#> 2:          4.6         3.1     0.243975  -0.5976143  setosa
#> 3:          5.0         3.6    -0.487950  -0.5976143  setosa
#> 4:          5.4         3.9     1.707825   1.7928429  setosa
#> 5:          4.6         3.4    -0.487950   0.5976143  setosa
#> 6:          5.0         3.4     0.243975  -0.5976143  setosa