如何使用dplyr对变量进行分组排序

142 阅读2分钟

你可以使用以下基本语法在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     A     12        5
2     A     28        7
3     A     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 A         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

如何处理排名中的平局

我们可以使用ties.method参数来指定我们在对数值进行排名时应该如何处理平局。

rank(points, ties.method='average')

你可以使用以下选项之一来指定如何处理平局。

  • average: (默认) 给每个并列的元素分配平均等级(排在第3和第4位的元素都会得到3.5的等级)
  • 第一:将第一个并列的元素分配到最低等级(排在第3和第4位的元素将分别得到3和4的等级)
  • min: 将每个并列的元素分配到最低的等级(排在第3和第4位的元素都会得到3的等级)
  • 最大:将每个并列的元素分配到最高等级(排在第3和第4位的元素都会得到4的等级)
  • 随机:给每个并列的元素分配一个随机的等级(并列在第3和第4位的任何一个元素都可以得到任何一个等级)

其他资源

下面的教程解释了如何执行dplyr中的其他常见功能:

如何使用dplyr
按组选择第一行如何使用dplyr
计算相对频率如何使用dplyr
重新编码数值如何在dplyr中用零替换NA