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 transmutation

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 6 160 110 3.9 2.62 16.5 0 1 4 4 12 #> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 12 #> 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 12 #> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 16 #> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 12 #> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 16 #> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 8 #> 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 12 #> # ... with 22 more rows, and 1 more variable: 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.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 #> [ reached getOption("max.print") -- omitted 22 rows ]
# 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 #> [ reached getOption("max.print") -- omitted 24 rows ]
# 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