Given data:
library(data.table) DT = data.table(category=LETTERS[1:3], b=1:3) DT # category b # 1: A 1 # 2: B 2 # 3: C 3 Using dplyr, how to rearrange rows to get specific order c("C", "A", "B") in category?
# category b # 1: C 3 # 2: A 1 # 3: B 2
Data Manipulation in R Sort a data frame rows in ascending order (from low to high) using the R function arrange() [dplyr package] Sort rows in descending order (from high to low) using arrange() in combination with the function desc() [dplyr package]
To sort a data frame in R, use the order( ) function. By default, sorting is ASCENDING. Prepend the sorting variable by a minus sign to indicate DESCENDING order.
arrange() orders the rows of a data frame by the values of selected columns.
First, create a vector with the letters in the desired order. Then match* the vector with the variable to be sorted. match returns indices of (first) matches, which can be plugged into slice:
library(dplyr) # create a vector with letters in the desired order x <- c("C", "A", "B") DT %>% slice(match(x, category)) # category b # 1 C 3 # 2 A 1 # 3 B 2 Another way would be to convert "category" to a factor, set levels to the desired order, and use arrange:
DT %>% mutate(category = factor(category, levels = x)) %>% arrange(category) # category b # 1 C 3 # 2 A 1 # 3 B 2 *The match method is inspired by this answer.
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