dplyrを使用して行をカスタム順序で並べ替える [重複] 質問する

dplyrを使用して行をカスタム順序で並べ替える [重複] 質問する

arrange関数を使用するとdplyr、行を昇順または降順に並べることができます。行をカスタム順序で並べる方法を知りたい場合は、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()

望ましい出力

   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

ベストアンサー1

をカスタムfactor変更するために使用できますorder

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

または、matchインデックスを取得してarrangeそれに基づいて

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

arrange降順で並べる列が複数ある場合

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

おすすめ記事