Données données:
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
En utilisant dplyr
, comment réorganiser les lignes pour obtenir un ordre spécifique c("C", "A", "B")
dans category
?
# category b
# 1: C 3
# 2: A 1
# 3: B 2
Créez d'abord un vecteur avec les lettres dans l'ordre souhaité. Puis match
* le vecteur avec la variable à trier. match
renvoie les indices des (premières) correspondances, qui peuvent être connectés à 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
Une autre façon serait de convertir "catégorie" en factor
, de définir levels
dans l'ordre souhaité et d'utiliser arrange
:
DT %>%
mutate(category = factor(category, levels = x)) %>%
arrange(category)
# category b
# 1 C 3
# 2 A 1
# 3 B 2
* La méthode match
est inspirée de cette réponse .