使用dplyr按自定义顺序排列行

MYa*_*208 27 r data-manipulation 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()
Run Code Online (Sandbox Code Playgroud)

期望的输出

   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
Run Code Online (Sandbox Code Playgroud)

akr*_*run 49

我们可以使用自定义方式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
Run Code Online (Sandbox Code Playgroud)

match获得指数和arrange

df %>%
    arrange(match(Reg, c("C", "A", "B")), desc(Res), desc(Pop))
Run Code Online (Sandbox Code Playgroud)

如果我们有多个列arrange按降序排列

df %>%
     arrange_at(2:3, desc) %>%
     arrange(match(Reg, c("C", "A", "B")))
Run Code Online (Sandbox Code Playgroud)

  • 感谢@akrun 提供了很好的解决方案。有没有对所有剩余的变量使用 `desc` 而不输入它们的名字?谢谢 (2认同)
  • 似乎如果排序变量已经定义为`arrange`之外的有序因子,`arrange`的行为仍然是按字母顺序排序......怎么会? (2认同)

小智 5

我使用了slice()函数:

   df %<>%
   slice(5,6,1:4)
Run Code Online (Sandbox Code Playgroud)