How to number rows within a group in dataframe

dplyr
dplyr n()
dplyr row_number()
Published

January 27, 2022

In this tutorial, how to add numbers to rows with in each group in a dataframe in R. The picture below illustrates an example of adding row numbers per group. How to add row number with each group of a dataframe in R Add Numbers to rows within groups in dataframe ### Packages And Data We will first create sample dataframe using tibble function and then use dplyr’s functions to add sequence of numbers to each group in a dataframe based on a grouping variable in two ways. First, we will use dplyr’s row_number() function in combination with group_by() to add numbers within each group. And then we will use dplyr’s n() function to do the same.

Let us first load tidyverse.

library(tidyverse)

We create a a simple dataframe using tibble with two groups.

df   
## 1 g2         4
## 2 g1         5
## 3 g1        14
## 4 g2        19
## 5 g2         2
## 6 g2         8

How to add numbers to rows within each group in a data frame

TO add sequence of number to rows within each group we will first use group_by() function in dplyr on the column that contains the groups. In this example, “grp” column contains grouping variable. After applying group_by() we can mutate to add a column and use row_number() function to add numbers to each row within a group.

df %>%
  group_by(grp) %>%
  mutate(id=row_number())
## # A tibble: 6 × 3
## # Groups:   grp [2]
##   grp   counts    id
##      
## 1 g2         4     1
## 2 g1         5     1
## 3 g1        14     2
## 4 g2        19     2
## 5 g2         2     3
## 6 g2         8     4

Note that the grouping variable does not have be ordered for this to work.

df %>%
  group_by(grp) %>%
  mutate(id=row_number()) %>%
  arrange(grp)
## # A tibble: 6 × 3
## # Groups:   grp [2]
##   grp   counts    id
##      
## 1 g1         5     1
## 2 g1        14     2
## 3 g2         4     1
## 4 g2        19     2
## 5 g2         2     3
## 6 g2         8     4

Adding numbers to rows within each group in a data frame: Second way

Here is another way to add row numbers with in each group using dplyr functions in R. In this example, we use n() instead of row_number(). The dplyr function n() gets the number of rows and here it gives us the number of rows in the current grouped dataframe.

df %>%
  group_by(grp) %>%
  mutate(id=1:n())
## # A tibble: 6 × 3
## # Groups:   grp [2]
##   grp   counts    id
##      
## 1 g2         4     1
## 2 g1         5     1
## 3 g1        14     2
## 4 g2        19     2
## 5 g2         2     3
## 6 g2         8     4

You may be interested in learning dplyr row_number(): Add unique row number to a dataframe