Julien
Julien

Reputation: 1696

How to group dates by periods of n days in R?

Input
dates <- as.Date(c("2022-01-20", "2022-01-30", "2022-01-31", "2022-02-10"))
n     <- 10 # number of days for each period
Output
group <- c(1, 2, 2, 3)

Group 1 corresponds to the earliest date and dates that are in a period of n - 1 days at most after the earliest date of the vector.

One could convert each date to its number of days (since when 1900?) and use the %/% operator but I want a more proper solution.

Another solution would be to use seq(min(dates), max(dates), by = "10 days") but I can't manage to find such a way to achieve the output.

Upvotes: 2

Views: 78

Answers (1)

Rui Barradas
Rui Barradas

Reputation: 76402

Like this?

dates <- as.Date(c("2022-01-20", "2022-01-30", "2022-01-31", "2022-02-10"))
n     <- 10 # number of days for each period

as.integer(factor(as.integer(dates) %/% n))
#> [1] 1 2 2 3

Created on 2022-10-30 with reprex v2.0.2

Or with findInterval.

findInterval(dates, seq(min(dates), max(dates), by = "10 days"))
#> [1] 1 2 2 3

Created on 2022-10-30 with reprex v2.0.2

Upvotes: 3

Related Questions