Often you may want to find the maximum value of each group in a data frame in R. Fortunately this is easy to do using functions from the dplyr package.

This tutorial explains how to do so using the following data frame:

#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 A G 12 2 A F 15 3 A F 19 4 B G 22 5 B G 34 6 B G 34 7 B F 39

**Example 1: Find Max Value by Group**

The following code shows how to find the max value by team and position:

library(dplyr) #find max value by team and position df %>% group_by(team, position) %>% summarise(max = max(points, na.rm=TRUE)) # A tibble: 4 x 3 # Groups: team [?] team position max 1 A F 19.0 2 A G 12.0 3 B F 39.0 4 B G 34.0

**Example 2: Return Rows that Contains Max Value by Group**

The following code shows how to return the rows that contain the max value by team and position:

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 A G 12.0 2 A F 19.0 3 B G 34.0 4 B G 34.0 5 B F 39.0

**Example 3: Return a Single Row that Contains Max Value by Group**

In the previous example, there were two players who had the max amount of points on team A who were both in position G. If you only want to return the first player with the max value in a group, you can use the **slice() **function as follows:

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 1 A F 19.0 2 A G 12.0 3 B F 39.0 4 B G 34.0

**Additional Resources**

The Complete Guide: How to Group & Summarize Data in R

How to Filter Rows in R

How to Remove Duplicate Rows in R

how would you accomplish this if you had another response variable (so say you have team and position as your grouping variables and points and kicks as your response). With this you can determine which position on each team scored the max points, but what if you wanted to determine which team had the max points and max kicks