web-dev-qa-db-fra.com

Organisation des lignes dans un ordre personnalisé à l'aide de dplyr

Avec arrange fonction dans dplyr, nous pouvons organiser les lignes par ordre croissant ou décroissant. Je me demande comment organiser les lignes dans un ordre personnalisé. S'il vous plaît voir MWE.

Reg <- rep(LETTERS[1:3], each = 2)
Res <- rep(c("Urban", "Rural"), times = 3)
set.seed(12345)
Pop <- rpois(n = 6, lambda = 500000)
df <- data.frame(Reg, Res, Pop)

df
   Reg   Res    Pop
1    A Urban 500414
2    A Rural 500501
3    B Urban 499922
4    B Rural 500016
5    C Urban 501638
6    C Rural 499274

df %>%
  arrange()

sortie souhaitée

   Reg   Res    Pop
5    C Urban 501638
6    C Rural 499274
1    A Urban 500414
2    A Rural 500501
3    B Urban 499922
4    B Rural 500016
24
MYaseen208

Nous pouvons utiliser factor pour changer le order de manière personnalisée

df %>%
    arrange(factor(Reg, levels = LETTERS[c(3, 1, 2)]), desc(Res), desc(Pop))
#  Reg   Res    Pop
#1   C Urban 501638
#2   C Rural 499274
#3   A Urban 500414
#4   A Rural 500501
#5   B Urban 499922
#6   B Rural 500016

Ou avec match pour obtenir l'index et arrange dessus

df %>%
    arrange(match(Reg, c("C", "A", "B")), desc(Res), desc(Pop))

Si nous avons plusieurs colonnes à arrange dans l'ordre décroissant

df %>%
     arrange_at(2:3, desc) %>%
     arrange(match(Reg, c("C", "A", "B")))
45
akrun

en utilisant data.table

df1[order(factor(Reg,levels = LETTERS[c(3,1,2)]))]

Ici df1 est data.table

1
dondapati