Ответ 1
Сначала создайте вектор с буквами в нужном порядке. Тогда match
* вектор с переменной, подлежащей сортировке. match
возвращает индексы (первых) совпадений, которые могут быть вставлены в 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
Другим способом было бы преобразовать "категорию" в factor
, установить levels
в желаемый порядок и использовать arrange
:
DT %>%
mutate(category = factor(category, levels = x)) %>%
arrange(category)
# category b
# 1 C 3
# 2 A 1
# 3 B 2
* Метод match
основан на этом ответе.