mutate() adds new variables and preserves existing; transmute() drops existing variables.

mutate(.data, ...)

transmute(.data, ...)

Arguments

.data

A tbl. All main verbs are S3 generics and provide methods for tbl_df(), dtplyr::tbl_dt() and dbplyr::tbl_dbi().

...

Name-value pairs of expressions. Use NULL to drop a variable.

These arguments are automatically quoted and evaluated in the context of the data frame. They support unquoting and splicing. See vignette("programming") for an introduction to these concepts.

Value

An object of the same class as .data.

Useful functions

Scoped mutation and transmuation

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.

Tidy data

When applied to a data frame, row names are silently dropped. To preserve, convert to an explicit variable with tibble::rownames_to_column().

See also

Other single table verbs: arrange, filter, select, slice, summarise

Examples

# 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 #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 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 #> # ... with 22 more rows, and 1 more variables: cyl4 <dbl>
# 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.621936 110 3.90 2.620 16.46 0 1 4 4 #> 2 6 2.621936 110 3.90 2.875 17.02 0 1 4 4 #> 3 4 1.769807 93 3.85 2.320 18.61 1 1 4 1 #> 4 6 4.227872 110 3.08 3.215 19.44 1 0 3 1 #> 5 8 5.899356 175 3.15 3.440 17.02 0 0 3 2 #> 6 6 3.687098 105 2.76 3.460 20.22 1 0 3 1 #> 7 8 5.899356 245 3.21 3.570 15.84 0 0 3 4 #> 8 4 2.403988 62 3.69 3.190 20.00 1 0 4 2 #> 9 4 2.307304 95 3.92 3.150 22.90 1 0 4 2 #> 10 6 2.746478 123 3.92 3.440 18.30 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.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 2 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 2 #> 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 1 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 2 #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 6 #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 11 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 7 #> 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 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.0 600 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 2 21.0 600 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 3 22.8 400 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 4 21.4 600 258.0 110 3.08 3.215 19.44 1 0 3 1 #> 5 18.7 800 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 18.1 600 225.0 105 2.76 3.460 20.22 1 0 3 1 #> 7 14.3 800 360.0 245 3.21 3.570 15.84 0 0 3 4 #> 8 24.4 400 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 9 22.8 400 140.8 95 3.92 3.150 22.90 1 0 4 2 #> 10 19.2 600 167.6 123 3.92 3.440 18.30 1 0 4 4 #> # ... with 22 more rows