How to Filter by Date Using dplyr

Filtering by date using dplyr is an easy way to subset rows based on a date range. With dplyr, you can use the filter function to select rows within a certain range of dates. You just need to specify the column containing the date and the range of dates you want to filter for. The filter function is very powerful and can be used in combination with other dplyr functions to further filter and subset your data.


You can use the following methods to filter a data frame by dates in R using the package:

Method 1: Filter Rows After Date

df %>% filter(date_column > '2022-01-01')

Method 2: Filter Rows Before Date

df %>% filter(date_column < '2022-01-01') 

Method 3: Filter Rows Between Two Dates

df %>% filter(between(date_column, as.Date('2022-01-20'), as.Date('2022-02-20')))

The following examples show how to use each method in practice with the following data frame in R:

#create data frame
df <- data.frame(day=seq(as.Date('2022-01-01'), by = 'week', length.out=10),
                 sales=c(40, 35, 39, 44, 48, 51, 23, 29, 60, 65))

#view data frame
df

          day sales
1  2022-01-01    40
2  2022-01-08    35
3  2022-01-15    39
4  2022-01-22    44
5  2022-01-29    48
6  2022-02-05    51
7  2022-02-12    23
8  2022-02-19    29
9  2022-02-26    60
10 2022-03-05    65

Example 1: Filter Rows After Date

We can use the following code to filter for the rows in the data frame that have a date after 1/25/2022:

library(dplyr)

#filter for rows with date after 1/25/2022
df %>% filter(day > '2022-01-25')

         day sales
1 2022-01-29    48
2 2022-02-05    51
3 2022-02-12    23
4 2022-02-19    29
5 2022-02-26    60
6 2022-03-05    65

Each of the rows in the resulting data frame have a date after 1/25/2022.

Example 2: Filter Rows Before Date

We can use the following code to filter for the rows in the data frame that have a date before 1/25/2022:

library(dplyr)

#filter for rows with date before 1/25/2022
df %>% filter(day < '2022-01-25')

         day sales
1 2022-01-01    40
2 2022-01-08    35
3 2022-01-15    39
4 2022-01-22    44

Each of the rows in the resulting data frame have a date before 1/25/2022.

Example 3: Filter Rows Between Two Dates

We can use the following code to filter for the rows in the data frame that have a date between 1/20/2022 and 2/20/2022:

library(dplyr)

#filter for rows with dates between 1/20/2022 and 2/20/2022
df %>% filter(between(date_column, as.Date('2022-01-20'), as.Date('2022-02-20'))) 

         day sales
1 2022-01-22    44
2 2022-01-29    48
3 2022-02-05    51
4 2022-02-12    23
5 2022-02-19    29

Each of the rows in the resulting data frame have a date between 1/20/2022 and 2/20/2022.

Note #1: If any of the methods above don’t work, then you may need to first convert the dates you’re working with to a recognizable date format using the as.Date() function.

Note #2: You can find the complete documentation for the filter function in dplyr .

The following tutorials explain how to perform other common operations in dplyr:

x