Sort by Multiple Columns in R (With Examples)?

In R, the “order” and “arrange” functions can be used to sort data frame by multiple columns. For example, the command “arrange(data, col1, col2, col3)” will sort the data frame “data” by columns “col1”, “col2”, and “col3” in ascending order. Additionally, the “desc” argument can be used to sort the data in descending order. This allows for sorting data frames by multiple columns with different sorting orders.


You can use one of the following methods to sort a data frame by multiple columns in R:

Method 1: Use Base R

df[order(-df$column1, df$column2), ]

Method 2: Use dplyr

library(dplyr)

df %>%
  arrange(desc(column1), column2)

The following examples show how to use each method in practice with the following data frame:

#create data frame
df <- data.frame(team=c('A', 'B', 'C', 'D', 'E', 'F', 'G'),
                 points=c(90, 90, 93, 91, 91, 99, 85),
                 assists=c(33, 28, 31, 39, 34, 40, 44))

#view data frame
df

  team points assists
1    A     90      33
2    B     90      28
3    C     93      31
4    D     91      39
5    E     91      34
6    F     99      40
7    G     85      44

Method 1: Use Base R

The following code shows how to sort the data frame in base R by points descending (largest to smallest), then by assists ascending:

#sort by points descending, then by assists ascending
df[order(-df$points, df$assists), ]

  team points assists
6    F     99      40
3    C     93      31
5    E     91      34
4    D     91      39
2    B     90      28
1    A     90      33
7    G     85      44

Notice that the rows of the data frame are ordered by points from largest to smallest, then by assists from smallest to largest.

Method 2: Use dplyr

The following code shows how to use functions from the package to sort the data frame by points descending (largest to smallest), then by assists ascending:

library(dplyr)

df %>%
  arrange(desc(points), assists)

  team points assists
1    F     99      40
2    C     93      31
3    E     91      34
4    D     91      39
5    B     90      28
6    A     90      33
7    G     85      44

Once again, the rows of the data frame are ordered by points from largest to smallest, then by assists from smallest to largest.

Note: You can find the complete documentation for the arrange() function .

x