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