mutate()
adds new variables and preserves existing;
transmute()
drops existing variables.
mutate(.data, ...) transmute(.data, ...)
.data | A tbl. All main verbs are S3 generics and provide methods
for |
---|---|
... | Name-value pairs of expressions. Use These arguments are automatically quoted and
evaluated in the context of the data
frame. They support unquoting and
splicing. See |
An object of the same class as .data
.
+
, -
etc
log()
dense_rank()
, min_rank()
, percent_rank()
, row_number()
,
cume_dist()
, ntile()
The three scoped variants of mutate()
(mutate_all()
,
mutate_if()
and mutate_at()
) and the three variants of
transmute()
(transmute_all()
, transmute_if()
,
transmute_at()
) make it easy to apply a transformation to a
selection of variables.
When applied to a data frame, row names are silently dropped. To preserve,
convert to an explicit variable with tibble::rownames_to_column()
.
# Newly created variables are available immediately mtcars %>% as_tibble() %>% mutate( cyl2 = cyl * 2, cyl4 = cyl2 * 2 )#> # A tibble: 32 x 13 #> mpg cyl disp hp drat wt qsec vs am gear carb cyl2 cyl4 #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 12 24 #> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 12 24 #> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 8 16 #> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 12 24 #> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 16 32 #> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 12 24 #> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 16 32 #> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 8 16 #> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 8 16 #> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 12 24 #> # ... with 22 more rows# You can also use mutate() to remove variables and # modify existing variables mtcars %>% as_tibble() %>% mutate( mpg = NULL, disp = disp * 0.0163871 # convert to litres )#> # A tibble: 32 x 10 #> cyl disp hp drat wt qsec vs am gear carb #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 6 2.62 110 3.9 2.62 16.5 0 1 4 4 #> 2 6 2.62 110 3.9 2.88 17.0 0 1 4 4 #> 3 4 1.77 93 3.85 2.32 18.6 1 1 4 1 #> 4 6 4.23 110 3.08 3.22 19.4 1 0 3 1 #> 5 8 5.90 175 3.15 3.44 17.0 0 0 3 2 #> 6 6 3.69 105 2.76 3.46 20.2 1 0 3 1 #> 7 8 5.90 245 3.21 3.57 15.8 0 0 3 4 #> 8 4 2.40 62 3.69 3.19 20 1 0 4 2 #> 9 4 2.31 95 3.92 3.15 22.9 1 0 4 2 #> 10 6 2.75 123 3.92 3.44 18.3 1 0 4 4 #> # ... with 22 more rows# window functions are useful for grouped mutates mtcars %>% group_by(cyl) %>% mutate(rank = min_rank(desc(mpg)))#> # A tibble: 32 x 12 #> # Groups: cyl [3] #> mpg cyl disp hp drat wt qsec vs am gear carb rank #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> #> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 2 #> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 2 #> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 8 #> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 1 #> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 2 #> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 6 #> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 11 #> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 7 #> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 8 #> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 5 #> # ... with 22 more rows# see `vignette("window-functions")` for more details # You can drop variables by setting them to NULL mtcars %>% mutate(cyl = NULL)#> mpg disp hp drat wt qsec vs am gear carb #> 1 21.0 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4 #> 11 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4 #> 12 16.4 275.8 180 3.07 4.070 17.40 0 0 3 3 #> 13 17.3 275.8 180 3.07 3.730 17.60 0 0 3 3 #> 14 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3 #> 15 10.4 472.0 205 2.93 5.250 17.98 0 0 3 4 #> 16 10.4 460.0 215 3.00 5.424 17.82 0 0 3 4 #> 17 14.7 440.0 230 3.23 5.345 17.42 0 0 3 4 #> 18 32.4 78.7 66 4.08 2.200 19.47 1 1 4 1 #> 19 30.4 75.7 52 4.93 1.615 18.52 1 1 4 2 #> 20 33.9 71.1 65 4.22 1.835 19.90 1 1 4 1 #> 21 21.5 120.1 97 3.70 2.465 20.01 1 0 3 1 #> 22 15.5 318.0 150 2.76 3.520 16.87 0 0 3 2 #> 23 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2 #> 24 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4 #> 25 19.2 400.0 175 3.08 3.845 17.05 0 0 3 2 #> 26 27.3 79.0 66 4.08 1.935 18.90 1 1 4 1 #> 27 26.0 120.3 91 4.43 2.140 16.70 0 1 5 2 #> 28 30.4 95.1 113 3.77 1.513 16.90 1 1 5 2 #> 29 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4 #> 30 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6 #> 31 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8 #> 32 21.4 121.0 109 4.11 2.780 18.60 1 1 4 2# mutate() vs transmute -------------------------- # mutate() keeps all existing variables mtcars %>% mutate(displ_l = disp / 61.0237)#> mpg cyl disp hp drat wt qsec vs am gear carb displ_l #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 2.621932 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 2.621932 #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 1.769804 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 4.227866 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 5.899347 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 3.687092 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 5.899347 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 2.403984 #> 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 2.307300 #> 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 2.746474 #> 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 2.746474 #> 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 4.519556 #> 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 4.519556 #> 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 4.519556 #> 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 7.734700 #> 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 7.538055 #> 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 7.210313 #> 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 1.289663 #> 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 1.240502 #> 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 1.165121 #> 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 1.968088 #> 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 5.211090 #> 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 4.981671 #> 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 5.735477 #> 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 6.554830 #> 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 1.294579 #> 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 1.971365 #> 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 1.558411 #> 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 5.751864 #> 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 2.376126 #> 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 4.932510 #> 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 1.982836# transmute keeps only the variables you create mtcars %>% transmute(displ_l = disp / 61.0237)#> displ_l #> 1 2.621932 #> 2 2.621932 #> 3 1.769804 #> 4 4.227866 #> 5 5.899347 #> 6 3.687092 #> 7 5.899347 #> 8 2.403984 #> 9 2.307300 #> 10 2.746474 #> 11 2.746474 #> 12 4.519556 #> 13 4.519556 #> 14 4.519556 #> 15 7.734700 #> 16 7.538055 #> 17 7.210313 #> 18 1.289663 #> 19 1.240502 #> 20 1.165121 #> 21 1.968088 #> 22 5.211090 #> 23 4.981671 #> 24 5.735477 #> 25 6.554830 #> 26 1.294579 #> 27 1.971365 #> 28 1.558411 #> 29 5.751864 #> 30 2.376126 #> 31 4.932510 #> 32 1.982836# mutate() supports quasiquotation. You can unquote quosures, which # can refer to both contextual variables and variable names: var <- 100 as_tibble(mtcars) %>% mutate(cyl = !!quo(cyl * var))#> # A tibble: 32 x 11 #> mpg cyl disp hp drat wt qsec vs am gear carb #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 21 600 160 110 3.9 2.62 16.5 0 1 4 4 #> 2 21 600 160 110 3.9 2.88 17.0 0 1 4 4 #> 3 22.8 400 108 93 3.85 2.32 18.6 1 1 4 1 #> 4 21.4 600 258 110 3.08 3.22 19.4 1 0 3 1 #> 5 18.7 800 360 175 3.15 3.44 17.0 0 0 3 2 #> 6 18.1 600 225 105 2.76 3.46 20.2 1 0 3 1 #> 7 14.3 800 360 245 3.21 3.57 15.8 0 0 3 4 #> 8 24.4 400 147. 62 3.69 3.19 20 1 0 4 2 #> 9 22.8 400 141. 95 3.92 3.15 22.9 1 0 4 2 #> 10 19.2 600 168. 123 3.92 3.44 18.3 1 0 4 4 #> # ... with 22 more rows