With arrange
function in dplyr
, we can arrange row in ascending or descending order. Wonder how to arrange rows in custom order. Please see MWE.
Reg <- rep(LETTERS[1:3], each = 2) Res <- rep(c("Urban", "Rural"), times = 3) set.seed(12345) Pop <- rpois(n = 6, lambda = 500000) df <- data.frame(Reg, Res, Pop) df Reg Res Pop 1 A Urban 500414 2 A Rural 500501 3 B Urban 499922 4 B Rural 500016 5 C Urban 501638 6 C Rural 499274 df %>% arrange()
Desired Output
Reg Res Pop 5 C Urban 501638 6 C Rural 499274 1 A Urban 500414 2 A Rural 500501 3 B Urban 499922 4 B Rural 500016
Arrange rowsThe dplyr function arrange() can be used to reorder (or sort) rows by one or more variables. Instead of using the function desc(), you can prepend the sorting variable by a minus sign to indicate descending order, as follow. If the data contain missing values, they will always come at the end.
To change the row order in an R data frame, we can use single square brackets and provide the row order at first place.
arrange() orders the rows of a data frame by the values of selected columns.
What is the arrange() function in R? The arrange() function in R programming is used to reorder the rows of a data frame/table by using column names. These columns are passed as the expression in the function.
We can use factor
to change the order
in a custom way
df %>% arrange(factor(Reg, levels = LETTERS[c(3, 1, 2)]), desc(Res), desc(Pop)) # Reg Res Pop #1 C Urban 501638 #2 C Rural 499274 #3 A Urban 500414 #4 A Rural 500501 #5 B Urban 499922 #6 B Rural 500016
Or with match
to get the index and arrange
on it
df %>% arrange(match(Reg, c("C", "A", "B")), desc(Res), desc(Pop))
If we have multiple columns to arrange
in descending order
df %>% arrange_at(2:3, desc) %>% arrange(match(Reg, c("C", "A", "B")))
I used the slice() function:
df %<>% slice(5,6,1:4)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With