如何在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