mam następujące dane:
library(data.table)
DT = data.table(category=LETTERS[1:3], b=1:3)
DT
# kategoria b
# 1: A 1
# 2: B 2
# 3: C 3
Używając dplyr
, jak zmienić kolejność wierszy, aby uzyskać określoną kolejność c („C”, „A”, „B”) w kategorii?
# kategoria b
# 1: C 3
# 2: A 1
# 3: B 2
1 odpowiedź
Najpierw utwórz wektor z literami w żądanej kolejności. Następnie dopasuj * wektor do zmiennej, która ma zostać posortowana. match zwraca indeksy (pierwszych) dopasowań, które można podłączyć do slice
:
library(dplyr)
# utwórz wektor z literami w żądanej kolejności
x <- c("C", "A", "B")
DT %>%
slice(match(x, category))
# kategoria b
# 1 C 3
# 2 A 1
# 3 B 2
Innym sposobem byłoby przekonwertowanie „kategorii” na czynnik, ustawienie poziomów w pożądanej kolejności i użycie arrange
:
DT %>%
mutate(category = factor(category, levels = x)) %>%
arrange(category)
# kategoria b
# 1 C 3
# 2 A 1
# 3 B 2