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

使用 dplyr中的 arrange函数,我们可以按升序或降序排列行。不知道如何按自定义顺序排列行。请看 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
75278 次浏览

我们可以使用 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")))

使用 < em > data.table

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

这里 df1是 data.table

我使用了 切片()函数:

   df %<>%
slice(5,6,1:4)