你可以使用以下方法在dplyr中按组排列行。
方法1:按照组的升序排列行
library(dplyr)
#arrange rows in ascending order based on col2, grouped by col1
df %>%
group_by(col1) %>%
arrange(col2, .by_group=TRUE)
方法2:按照组的降序排列行
library(dplyr)
#arrange rows in descending order based on col2, grouped by col1
df %>%
group_by(col1) %>%
arrange(desc(col2), .by_group=TRUE)
方法3:按多个组排列行
library(dplyr)
#arrange rows based on col3, grouped by col1 and col2
df %>%
group_by(col1, col2) %>%
arrange(col3, .by_group=TRUE)
本教程解释了如何在以下数据框中实际使用每种方法:
#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'),
points=c(10, 12, 3, 14, 22, 15, 17, 17))
#view data frame
df
team position points
1 A G 10
2 A G 12
3 A F 3
4 A F 14
5 B G 22
6 B G 15
7 B F 17
8 B F 17
例1:按组升序排列数据行
下面的代码显示了如何根据分数按升序排列行,并按团队列分组:
library(dplyr)
#arrange rows in ascending order by points, grouped by team
df %>%
group_by(team) %>%
arrange(points, .by_group=TRUE)
# A tibble: 8 x 3
# Groups: team [2]
team position points
1 A F 3
2 A G 10
3 A G 12
4 A F 14
5 B G 15
6 B F 17
7 B F 17
8 B G 22
行按积分升序排列(从小到大),按球队列分组。
例2:按分组降序排列行
下面的代码显示了如何根据积分按降序排列行,并按球队列分组:
library(dplyr)
#arrange rows in descending order by points, grouped by team
df %>%
group_by(team) %>%
arrange(desc(points), .by_group=TRUE)
# A tibble: 8 x 3
# Groups: team [2]
team position points
1 A F 14
2 A G 12
3 A G 10
4 A F 3
5 B G 22
6 B F 17
7 B F 17
8 B G 15
行按积分降序排列(从大到小),按球队列分组。
例3:按多组排列行
下面的代码显示了如何根据积分按升序排列行,按球队 和 位置列分组:
library(dplyr)
#arrange rows in descending order by points, grouped by team and position
df %>%
group_by(team, position) %>%
arrange(points, .by_group=TRUE)
# A tibble: 8 x 3
# Groups: team, position [4]
team position points
1 A F 3
2 A F 14
3 A G 10
4 A G 12
5 B F 17
6 B F 17
7 B G 15
8 B G 22
行按积分升序排列(从小到大),按球队 和 位置列分组。