如何使用 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

添加评论

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