Use relocate()
to change column positions, using the same syntax as
select()
to make it easy to move blocks of columns at once.
Arguments
- .data
A Polars Data/LazyFrame
- ...
Any expression accepted by
dplyr::select()
: variable names, column numbers, select helpers, etc.- .before, .after
Column name (either quoted or unquoted) that indicates the destination of columns selected by
...
. Supplying neither will move columns to the left-hand side; specifying both is an error.
Examples
dat <- as_polars_df(mtcars)
dat |>
relocate(hp, vs, .before = cyl)
#> shape: (32, 11)
#> ┌──────┬───────┬─────┬─────┬───┬───────┬─────┬──────┬──────┐
#> │ mpg ┆ hp ┆ vs ┆ cyl ┆ … ┆ qsec ┆ am ┆ gear ┆ carb │
#> │ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
#> │ f64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
#> ╞══════╪═══════╪═════╪═════╪═══╪═══════╪═════╪══════╪══════╡
#> │ 21.0 ┆ 110.0 ┆ 0.0 ┆ 6.0 ┆ … ┆ 16.46 ┆ 1.0 ┆ 4.0 ┆ 4.0 │
#> │ 21.0 ┆ 110.0 ┆ 0.0 ┆ 6.0 ┆ … ┆ 17.02 ┆ 1.0 ┆ 4.0 ┆ 4.0 │
#> │ 22.8 ┆ 93.0 ┆ 1.0 ┆ 4.0 ┆ … ┆ 18.61 ┆ 1.0 ┆ 4.0 ┆ 1.0 │
#> │ 21.4 ┆ 110.0 ┆ 1.0 ┆ 6.0 ┆ … ┆ 19.44 ┆ 0.0 ┆ 3.0 ┆ 1.0 │
#> │ 18.7 ┆ 175.0 ┆ 0.0 ┆ 8.0 ┆ … ┆ 17.02 ┆ 0.0 ┆ 3.0 ┆ 2.0 │
#> │ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
#> │ 30.4 ┆ 113.0 ┆ 1.0 ┆ 4.0 ┆ … ┆ 16.9 ┆ 1.0 ┆ 5.0 ┆ 2.0 │
#> │ 15.8 ┆ 264.0 ┆ 0.0 ┆ 8.0 ┆ … ┆ 14.5 ┆ 1.0 ┆ 5.0 ┆ 4.0 │
#> │ 19.7 ┆ 175.0 ┆ 0.0 ┆ 6.0 ┆ … ┆ 15.5 ┆ 1.0 ┆ 5.0 ┆ 6.0 │
#> │ 15.0 ┆ 335.0 ┆ 0.0 ┆ 8.0 ┆ … ┆ 14.6 ┆ 1.0 ┆ 5.0 ┆ 8.0 │
#> │ 21.4 ┆ 109.0 ┆ 1.0 ┆ 4.0 ┆ … ┆ 18.6 ┆ 1.0 ┆ 4.0 ┆ 2.0 │
#> └──────┴───────┴─────┴─────┴───┴───────┴─────┴──────┴──────┘
# if .before and .after are not specified, selected columns are moved to the
# first positions
dat |>
relocate(hp, vs)
#> shape: (32, 11)
#> ┌───────┬─────┬──────┬─────┬───┬───────┬─────┬──────┬──────┐
#> │ hp ┆ vs ┆ mpg ┆ cyl ┆ … ┆ qsec ┆ am ┆ gear ┆ carb │
#> │ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
#> │ f64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
#> ╞═══════╪═════╪══════╪═════╪═══╪═══════╪═════╪══════╪══════╡
#> │ 110.0 ┆ 0.0 ┆ 21.0 ┆ 6.0 ┆ … ┆ 16.46 ┆ 1.0 ┆ 4.0 ┆ 4.0 │
#> │ 110.0 ┆ 0.0 ┆ 21.0 ┆ 6.0 ┆ … ┆ 17.02 ┆ 1.0 ┆ 4.0 ┆ 4.0 │
#> │ 93.0 ┆ 1.0 ┆ 22.8 ┆ 4.0 ┆ … ┆ 18.61 ┆ 1.0 ┆ 4.0 ┆ 1.0 │
#> │ 110.0 ┆ 1.0 ┆ 21.4 ┆ 6.0 ┆ … ┆ 19.44 ┆ 0.0 ┆ 3.0 ┆ 1.0 │
#> │ 175.0 ┆ 0.0 ┆ 18.7 ┆ 8.0 ┆ … ┆ 17.02 ┆ 0.0 ┆ 3.0 ┆ 2.0 │
#> │ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
#> │ 113.0 ┆ 1.0 ┆ 30.4 ┆ 4.0 ┆ … ┆ 16.9 ┆ 1.0 ┆ 5.0 ┆ 2.0 │
#> │ 264.0 ┆ 0.0 ┆ 15.8 ┆ 8.0 ┆ … ┆ 14.5 ┆ 1.0 ┆ 5.0 ┆ 4.0 │
#> │ 175.0 ┆ 0.0 ┆ 19.7 ┆ 6.0 ┆ … ┆ 15.5 ┆ 1.0 ┆ 5.0 ┆ 6.0 │
#> │ 335.0 ┆ 0.0 ┆ 15.0 ┆ 8.0 ┆ … ┆ 14.6 ┆ 1.0 ┆ 5.0 ┆ 8.0 │
#> │ 109.0 ┆ 1.0 ┆ 21.4 ┆ 4.0 ┆ … ┆ 18.6 ┆ 1.0 ┆ 4.0 ┆ 2.0 │
#> └───────┴─────┴──────┴─────┴───┴───────┴─────┴──────┴──────┘
# .before and .after can be quoted or unquoted
dat |>
relocate(hp, vs, .after = "gear")
#> shape: (32, 11)
#> ┌──────┬─────┬───────┬──────┬───┬──────┬───────┬─────┬──────┐
#> │ mpg ┆ cyl ┆ disp ┆ drat ┆ … ┆ gear ┆ hp ┆ vs ┆ carb │
#> │ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
#> │ f64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
#> ╞══════╪═════╪═══════╪══════╪═══╪══════╪═══════╪═════╪══════╡
#> │ 21.0 ┆ 6.0 ┆ 160.0 ┆ 3.9 ┆ … ┆ 4.0 ┆ 110.0 ┆ 0.0 ┆ 4.0 │
#> │ 21.0 ┆ 6.0 ┆ 160.0 ┆ 3.9 ┆ … ┆ 4.0 ┆ 110.0 ┆ 0.0 ┆ 4.0 │
#> │ 22.8 ┆ 4.0 ┆ 108.0 ┆ 3.85 ┆ … ┆ 4.0 ┆ 93.0 ┆ 1.0 ┆ 1.0 │
#> │ 21.4 ┆ 6.0 ┆ 258.0 ┆ 3.08 ┆ … ┆ 3.0 ┆ 110.0 ┆ 1.0 ┆ 1.0 │
#> │ 18.7 ┆ 8.0 ┆ 360.0 ┆ 3.15 ┆ … ┆ 3.0 ┆ 175.0 ┆ 0.0 ┆ 2.0 │
#> │ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
#> │ 30.4 ┆ 4.0 ┆ 95.1 ┆ 3.77 ┆ … ┆ 5.0 ┆ 113.0 ┆ 1.0 ┆ 2.0 │
#> │ 15.8 ┆ 8.0 ┆ 351.0 ┆ 4.22 ┆ … ┆ 5.0 ┆ 264.0 ┆ 0.0 ┆ 4.0 │
#> │ 19.7 ┆ 6.0 ┆ 145.0 ┆ 3.62 ┆ … ┆ 5.0 ┆ 175.0 ┆ 0.0 ┆ 6.0 │
#> │ 15.0 ┆ 8.0 ┆ 301.0 ┆ 3.54 ┆ … ┆ 5.0 ┆ 335.0 ┆ 0.0 ┆ 8.0 │
#> │ 21.4 ┆ 4.0 ┆ 121.0 ┆ 4.11 ┆ … ┆ 4.0 ┆ 109.0 ┆ 1.0 ┆ 2.0 │
#> └──────┴─────┴───────┴──────┴───┴──────┴───────┴─────┴──────┘
# select helpers are also available
dat |>
relocate(contains("[aeiou]"))
#> shape: (32, 11)
#> ┌──────┬─────┬───────┬───────┬───┬─────┬─────┬──────┬──────┐
#> │ mpg ┆ cyl ┆ disp ┆ hp ┆ … ┆ vs ┆ am ┆ gear ┆ carb │
#> │ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
#> │ f64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
#> ╞══════╪═════╪═══════╪═══════╪═══╪═════╪═════╪══════╪══════╡
#> │ 21.0 ┆ 6.0 ┆ 160.0 ┆ 110.0 ┆ … ┆ 0.0 ┆ 1.0 ┆ 4.0 ┆ 4.0 │
#> │ 21.0 ┆ 6.0 ┆ 160.0 ┆ 110.0 ┆ … ┆ 0.0 ┆ 1.0 ┆ 4.0 ┆ 4.0 │
#> │ 22.8 ┆ 4.0 ┆ 108.0 ┆ 93.0 ┆ … ┆ 1.0 ┆ 1.0 ┆ 4.0 ┆ 1.0 │
#> │ 21.4 ┆ 6.0 ┆ 258.0 ┆ 110.0 ┆ … ┆ 1.0 ┆ 0.0 ┆ 3.0 ┆ 1.0 │
#> │ 18.7 ┆ 8.0 ┆ 360.0 ┆ 175.0 ┆ … ┆ 0.0 ┆ 0.0 ┆ 3.0 ┆ 2.0 │
#> │ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
#> │ 30.4 ┆ 4.0 ┆ 95.1 ┆ 113.0 ┆ … ┆ 1.0 ┆ 1.0 ┆ 5.0 ┆ 2.0 │
#> │ 15.8 ┆ 8.0 ┆ 351.0 ┆ 264.0 ┆ … ┆ 0.0 ┆ 1.0 ┆ 5.0 ┆ 4.0 │
#> │ 19.7 ┆ 6.0 ┆ 145.0 ┆ 175.0 ┆ … ┆ 0.0 ┆ 1.0 ┆ 5.0 ┆ 6.0 │
#> │ 15.0 ┆ 8.0 ┆ 301.0 ┆ 335.0 ┆ … ┆ 0.0 ┆ 1.0 ┆ 5.0 ┆ 8.0 │
#> │ 21.4 ┆ 4.0 ┆ 121.0 ┆ 109.0 ┆ … ┆ 1.0 ┆ 1.0 ┆ 4.0 ┆ 2.0 │
#> └──────┴─────┴───────┴───────┴───┴─────┴─────┴──────┴──────┘
dat |>
relocate(hp, vs, .after = last_col())
#> shape: (32, 11)
#> ┌──────┬─────┬───────┬──────┬───┬──────┬──────┬───────┬─────┐
#> │ mpg ┆ cyl ┆ disp ┆ drat ┆ … ┆ gear ┆ carb ┆ hp ┆ vs │
#> │ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
#> │ f64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
#> ╞══════╪═════╪═══════╪══════╪═══╪══════╪══════╪═══════╪═════╡
#> │ 21.0 ┆ 6.0 ┆ 160.0 ┆ 3.9 ┆ … ┆ 4.0 ┆ 4.0 ┆ 110.0 ┆ 0.0 │
#> │ 21.0 ┆ 6.0 ┆ 160.0 ┆ 3.9 ┆ … ┆ 4.0 ┆ 4.0 ┆ 110.0 ┆ 0.0 │
#> │ 22.8 ┆ 4.0 ┆ 108.0 ┆ 3.85 ┆ … ┆ 4.0 ┆ 1.0 ┆ 93.0 ┆ 1.0 │
#> │ 21.4 ┆ 6.0 ┆ 258.0 ┆ 3.08 ┆ … ┆ 3.0 ┆ 1.0 ┆ 110.0 ┆ 1.0 │
#> │ 18.7 ┆ 8.0 ┆ 360.0 ┆ 3.15 ┆ … ┆ 3.0 ┆ 2.0 ┆ 175.0 ┆ 0.0 │
#> │ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
#> │ 30.4 ┆ 4.0 ┆ 95.1 ┆ 3.77 ┆ … ┆ 5.0 ┆ 2.0 ┆ 113.0 ┆ 1.0 │
#> │ 15.8 ┆ 8.0 ┆ 351.0 ┆ 4.22 ┆ … ┆ 5.0 ┆ 4.0 ┆ 264.0 ┆ 0.0 │
#> │ 19.7 ┆ 6.0 ┆ 145.0 ┆ 3.62 ┆ … ┆ 5.0 ┆ 6.0 ┆ 175.0 ┆ 0.0 │
#> │ 15.0 ┆ 8.0 ┆ 301.0 ┆ 3.54 ┆ … ┆ 5.0 ┆ 8.0 ┆ 335.0 ┆ 0.0 │
#> │ 21.4 ┆ 4.0 ┆ 121.0 ┆ 4.11 ┆ … ┆ 4.0 ┆ 2.0 ┆ 109.0 ┆ 1.0 │
#> └──────┴─────┴───────┴──────┴───┴──────┴──────┴───────┴─────┘