如何使用 dplyr 按组对变量进行排序
您可以使用以下基本语法对 dplyr 中的变量进行分组:
df %>% arrange (group_var, numeric_var) %>% group_by (group_var) %>% mutate (rank = rank(numeric_var))
以下示例展示了如何在实践中使用以下数据框使用此语法:
#create data frame df <- data. frame (team = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'), points = c(12, 28, 19, 22, 32, 45, 22, 28, 13, 19), rebounds = c(5, 7, 7, 12, 11, 4, 10, 7, 8, 8)) #view data frame df team points rebounds 1 to 12 5 2 to 28 7 3 to 19 7 4 A 22 12 5 B 32 11 6 B 45 4 7 B 22 10 8 C 28 7 9 C 13 8 10 C 19 8
示例1:按升序排列
以下代码显示了如何按球队分组的升序对球员得分进行排序:
library (dplyr) #rank points scored, grouped by team df %>% arrange (team, points) %>% group_by (team) %>% mutate (rank = rank(points)) # A tibble: 10 x 4 # Groups: team [3] team points rebounds rank 1 A 12 5 1 2 A 19 7 2 3 A 22 12 3 4 A 28 7 4 5 B 22 10 1 6 B 32 11 2 7 B 45 4 3 8 C 13 8 1 9 C 19 8 2 10 C 28 7 3
示例2:按降序排列
我们还可以使用Rank()函数中的负号按组的降序对得分进行分类:
library (dplyr) #rank points scored in reverse, grouped by team df %>% arrange (team, points) %>% group_by (team) %>% mutate (rank = rank(-points)) # A tibble: 10 x 4 # Groups: team [3] team points rebounds rank 1 to 12 5 4 2 A 19 7 3 3 A 22 12 2 4 A 28 7 1 5 B 22 10 3 6 B 32 11 2 7 B 45 4 1 8 C 13 8 3 9 C 19 8 2 10 C 28 7 1
如何处理排名中的平局
我们可以使用tie.method参数来指定在对数值进行排序时应如何处理关系。
rank(points, ties. method = ' average ')
您可以使用以下选项之一来指定如何处理链接:
- average :(默认)为每个链接的项目提供平均排名(排名第 3 和第 4 的项目都将获得 3.5 的排名)
- first :将第一个链接元素分配给最低排名(排名第 3 和第 4 位置的元素将分别获得排名 3 和 4)
- min :将每个链接的项目分配到最低排名(排名第 3 和第 4 的项目都将获得排名 3)
- max :为每个链接的项目分配最高排名(排名第 3 和第 4 的项目都将获得排名 4)
- random :为每个并列元素分配一个随机排名(与第三和第四位置并列的元素都可以接收任一排名)
其他资源
以下教程解释了如何在 dplyr 中执行其他常用功能:
如何使用 dplyr 按组选择第一行
如何使用 dplyr 计算相对频率
如何使用 dplyr 对值重新编码
如何在 dplyr 中用零替换 NA