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


您可以使用 R 中的dplyr包,使用以下基本语法以自定义顺序排列数据框的行:

 library (dplyr)

#arrange rows in custom order based on values in 'team' column
df %>%
  arrange(match(team, c(' C ', ' B ', ' D ', ' A ')), points)

此特定示例根据团队列值的自定义顺序 C、B、D、A 排列行,然后根据积分列值升序排列。

以下示例展示了如何在实践中使用此语法。

示例:如何使用 dplyr 按自定义顺序排列行

假设我们有以下数据框,显示来自不同球队的篮球运动员的得分:

 #create data frame
df <- data. frame (team=c('A', 'B', 'A', 'A', 'B', 'D', 'C', 'D', 'D', 'C'),
                 points=c(12, 20, 14, 34, 29, 22, 28, 15, 20, 13))

#view data frame
df

   team points
1 to 12
2 B 20
3 to 14
4 to 34
5 B 29
6 D 22
7 C 28
8 D 15
9 D 20
10 C 13

如果我们使用arrange()函数根据team列中的值对行进行排序,那么根据points列中的值, arrange()函数将根据默认的字母顺序对行进行排序:

 library (dplyr)

#arrange rows in ascending order by team, then by points
df %>%
  arrange(team, points)

   team points
1 to 12
2 to 14
3 to 34
4 B 20
5 B 29
6 C 13
7 C 28
8 D 15
9 D 20
10 D 22

线路按球队字母顺序排列,然后按积分升序排列。

但是,假设我们希望根据团队值的以下顺序排列线路:C、B、D、A。

我们可以使用 array () 函数中的 match ()函数来执行此操作:

 library (dplyr)

#arrange rows in custom order based on 'team' column, then by 'points' column
df %>%
  arrange(match(team, c(' C ', ' B ', ' D ', ' A ')), points)

   team points
1 C 13
2 C 28
3 B 20
4 B 29
5 D 15
6 D 20
7 D 22
8 to 12
9 to 14
10 to 34

这些行按照我们为团队列指定的自定义顺序(C、B、D、A)排列,然后按积分列排列。

注意#1match函数获取team列中值的行索引,然后arrange函数能够根据这些索引值进行排序。

注意#2 :要按点值递减排列,只需使用desc(points)即可。

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何使用 dplyr 按组组织行
如何使用dplyr过滤唯一值
如何使用 dplyr 按多个条件进行过滤

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注