The order() function can be used to sort a DataFrame in R:
(1) Sort a DataFrame based on a single column in an ascending order:
df[order(df$column_name), ]
(2) Sort a DataFrame based on a single column in a descending order:
df[order(df$column_name, decreasing=TRUE), ]
In the examples below, you’ll also observe how to sort a DataFrame based on multiple columns.
Examples of Sorting a DataFrame in R
Example 1: Sort a DataFrame based on a single column in an ascending order
To start, create the following DataFrame in R with 3 columns:
df <- data.frame( name = c("Maria", "Bill", "Rick", "Tina", "Dave"), age = c(29, 38, 52, 33, 41), gender = c("Female", "Male", "Male", "Female", "Male") ) df
Here is the DataFrame, which is currently unsorted:
name age gender
1 Maria 29 Female
2 Bill 38 Male
3 Rick 52 Male
4 Tina 33 Female
5 Dave 41 Male
To sort the DataFrame based on the “name” column in an ascending order:
df <- data.frame( name = c("Maria", "Bill", "Rick", "Tina", "Dave"), age = c(29, 38, 52, 33, 41), gender = c("Female", "Male", "Male", "Female", "Male") ) df_sorted_by_name_asc <- df[order(df$name), ] df_sorted_by_name_asc
The result is a sorted DataFrame based on the “name” column in an ascending order:
name age gender
2 Bill 38 Male
5 Dave 41 Male
1 Maria 29 Female
3 Rick 52 Male
4 Tina 33 Female
Example 2: Sort a DataFrame based on a single column in a descending order
To sort the DataFrame based on the “name” column in a descending order:
df <- data.frame( name = c("Maria", "Bill", "Rick", "Tina", "Dave"), age = c(29, 38, 52, 33, 41), gender = c("Female", "Male", "Male", "Female", "Male") ) df_sorted_by_name_desc <- df[order(df$name, decreasing=TRUE), ] df_sorted_by_name_desc
The sorted DataFrame:
name age gender
4 Tina 33 Female
3 Rick 52 Male
1 Maria 29 Female
5 Dave 41 Male
2 Bill 38 Male
Example 3: Sort a DataFrame based on multiple columns
To sort a DataFrame based on the “gender” AND the “age” columns in an ascending order:
df <- data.frame( name = c("Maria", "Bill", "Rick", "Tina", "Dave"), age = c(29, 38, 52, 33, 41), gender = c("Female", "Male", "Male", "Female", "Male") ) df_sorted_by_gender_and_age_asc <- df[order(df$gender, df$age), ] df_sorted_by_gender_and_age_asc
The sorted DataFrame:
name age gender
1 Maria 29 Female
4 Tina 33 Female
2 Bill 38 Male
5 Dave 41 Male
3 Rick 52 Male