如何在r中找到每组的最大值


通常,您可能希望找到 R 数据框中每个组的最大值。幸运的是,使用dplyr包中的函数可以轻松做到这一点。

本教程说明如何使用以下数据框执行此操作:

 #create data frame
df <- data.frame(team = c('A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 position = c('G', 'F', 'F', 'G', 'G', 'G', 'F'),
                 points = c(12, 15, 19, 22, 34, 34, 39))

#view data frame
df

  team position points
1 AG 12
2 AF15
3 FY 19
4 BG 22
5 BG 34
6 BG 34
7 BF 39

示例 1:查找每组的最大值

以下代码显示了如何查找每个团队每个位置的最大值:

 library(dplyr)

#find max value by team and position
df %>%
  group_by (team, position) %>%
  summarize (max = max(points, na.rm= TRUE ))

# A tibble: 4 x 3
# Groups: team [?]
  team position max
      
1AF 19.0
2 AG 12.0
3 BF 39.0
4 BG 34.0

示例 2:返回包含每组最大值的行

以下代码显示如何返回包含每个团队和每个位置的最大值的行:

 library(dplyr)

#find rows that contain max points by team and position
df %>%
  group_by (team, position) %>%
  filter (points == max(points, na.rm= TRUE ))

# A tibble: 5 x 3
# Groups: team, position [4]
  team position points
       
1 AG 12.0
2AF 19.0
3 BG 34.0
4 BG 34.0
5BF 39.0

示例 3:返回包含每组最大值的单行

在前面的示例中,A 队中有两名得分最高的球员,并且都位于 G 位置。如果您只想将第一个得分最高的球员返回到组中,可以使用slice( ) 功能。操作如下:

 library(dplyr)

#find rows that contain max points by team and position
df %>%
  group_by (team, position) %>%
  slice (which.max(points))

# A tibble: 4 x 3
# Groups: team, position [4]
  team position points
       
1AF 19.0
2 AG 12.0
3 BF 39.0
4 BG 34.0

其他资源

完整指南:如何在 R 中对数据进行分组和汇总
如何在 R 中过滤行
如何删除R中的重复行

添加评论

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