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.
CodePudding user response:
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