dplyr::arrange()
arrange(.data, ..., .by_group = FALSE) Returns:
tibble · Updated March 13, 2026 · Tidyverse dplyr sorting tidyverse
arrange() reorder rows of a data frame based on column values. By default, it sorts in ascending order. Use desc() to sort in descending order. When multiple columns are specified, arrange sorts by the first column, then breaks ties using the second, and so on.
Syntax
arrange(.data, ..., .by_group = FALSE)
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
.data | tibble / data.frame | — | A tibble or data frame to reorder |
... | column expressions | — | Columns to sort by, separated by commas. Use desc(col) for descending |
.by_group | logical | FALSE | If TRUE, sort by grouping variables first (from group_by()) |
Examples
Basic usage
library(dplyr)
df <- data.frame(
name = c("Charlie", "Alice", "Bob"),
score = c(85, 92, 78)
)
arrange(df, score)
# # A tibble: 3 × 2
# name score
# <chr> <dbl>
# 1 Bob 78
# 2 Charlie 85
# 3 Alice 92
Descending order
arrange(df, desc(score))
# # A tibble: 3 × 2
# name score
# <chr> <dbl>
# 1 Alice 92
# 2 Charlie 85
# 3 Bob 78
Multiple columns
df2 <- data.frame(
dept = c("Sales", "Sales", "Engineering", "Engineering"),
name = c("Bob", "Alice", "Charlie", "David"),
score = c(78, 85, 92, 88)
)
arrange(df2, dept, desc(score))
# # A tibble: 4 × 3
# dept name score
# <chr> <chr> <dbl>
# 1 Engineering Charlie 92
# 2 Engineering David 88
# 3 Sales Alice 85
# 4 Sales Bob 78
Common Patterns
Sort with filter
Combine arrange() with filter() to find extremes:
# Get top 3 scores
arrange(df, desc(score)) |> head(3)
Sort by calculated column
Use mutate() before arrange() for derived sort keys:
df |>
mutate(initials = paste0(substr(name, 1, 1), ".")) |>
arrange(initials)
Sort with NA values
NA values sort to the end by default:
df <- data.frame(x = c(3, 1, NA, 2))
arrange(df, x)
# # A tibble: 4 × 1
# x
# <dbl>
# 1 1
# 2 2
# 3 3
# 4 NA