Подтвердить что ты не робот

Изменение порядка строк с использованием пользовательского порядка

Данные:

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

Используя dplyr, как изменить порядок строк для получения определенного порядка c("C", "A", "B") в category?

#    category b
# 1:        C 3
# 2:        A 1
# 3:        B 2
4b9b3361

Ответ 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 основан на этом ответе.