Use relocate() to change column positions, using the same syntax as select() to make it easy to move blocks of columns at once.

relocate(.data, ..., .before = NULL, .after = NULL)

Arguments

.data

A data.frame.

...

<poor-select> Columns to move.

.before, .after

<poor-select> Destination of columns selected by .... Supplying neither will move columns to the left-hand side; specifying both will result in an error.

Value

An object of the same type as .data. The output has the following properties:

  • Rows are not affected.

  • The same columns appear in the output, but (usually) in a different place.

  • Data frame attributes are preserved.

  • Groups are not affected.

Examples

df <- data.frame( a = 1, b = 1, c = 1, d = "a", e = "a", f = "a", stringsAsFactors = FALSE ) df %>% relocate(f)
#> f a b c d e #> 1 a 1 1 1 a a
df %>% relocate(a, .after = c)
#> b c a d e f #> 1 1 1 1 a a a
df %>% relocate(f, .before = b)
#> a f b c d e #> 1 1 a 1 1 a a
df %>% relocate(a, .after = last_col())
#> b c d e f a #> 1 1 1 a a a 1
# Can also select variables based on their type df %>% relocate(where(is.character))
#> d e f a b c #> 1 a a a 1 1 1
df %>% relocate(where(is.numeric), .after = last_col())
#> d e f a b c #> 1 a a a 1 1 1
# Or with any other select helper df %>% relocate(any_of(c("a", "e", "i", "o", "u")))
#> a e b c d f #> 1 1 a 1 1 a a
# When .before or .after refers to multiple variables they will be # moved to be immediately before/after the selected variables. df2 <- data.frame( a = 1, b = "a", c = 1, d = "a", stringsAsFactors = FALSE ) df2 %>% relocate(where(is.numeric), .after = where(is.character))
#> b d a c #> 1 a a 1 1
df2 %>% relocate(where(is.numeric), .before = where(is.character))
#> a c b d #> 1 1 1 a a