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)
A data.table
Name-value pairs of expressions
(Optional) Mutate by what group?
An object which can be coerced to logical mode
Any types that can be accepted by select_dt
.
Function to be run within each column, should return a value or vectors with same length.
A data.table
# 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