Skip to contents

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

Usage

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