如何在R语言中按n天为周期对日期进行分组?
R语言日期分组解决方案
问题说明
需要将给定日期按规则分组:分组1对应最早日期及其后最多n-1天内的日期,后续每组以此类推,每组覆盖n天周期(从组内起始日起算n-1天)。
输入数据
dates <- as.Date(c("2022-01-20", "2022-01-30", "2022-01-31", "2022-02-10")) n <- 10 # 每个周期的天数
期望输出
group <- c(1, 2, 2, 3)
实现方法
方法一:基于lubridate的规范实现(推荐)
借助专业日期处理包lubridate的函数,逻辑清晰且符合日期操作规范:
library(lubridate) start_date <- min(dates) # 计算日期相对起始日的偏移,按n天周期取整后转换为分组编号 group <- as.integer(floor_date(dates - start_date, paste(n, "days")) / days(n)) + 1
方法二:Base R原生实现
无需依赖第三方包,用基础R的日期运算即可完成:
start_date <- min(dates) # 将日期转为相对起始日的天数,通过整数除法得到分组 group <- (as.integer(dates - start_date) %/% n) + 1
逻辑解释
两种方法核心逻辑一致:
- 以所有日期的最小值作为分组基准起始日
- 计算每个日期与起始日的天数差
- 将天数差按
n天做整数除法,结果加1得到从1开始的分组编号
对应示例数据的计算过程:
- 2022-01-20与起始日差0天 → 0%/%10=0 → 分组1
- 2022-01-30与起始日差10天 →10%/%10=1 → 分组2
- 2022-01-31与起始日差11天 →11%/%10=1 → 分组2
- 2022-02-10与起始日差21天 →21%/%10=2 → 分组3
完全匹配预期输出。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

