如何在R中按月份对日期分箱并统计各分箱的日期数量
R语言日期分箱计数实现方案
实现步骤
- 依赖
lubridate处理日期,dplyr做数据变换 - 核心逻辑:生成dt1到dt2区间内所有月份的月末日期,剔除大于dt2的日期后统计数量,剩余的月末日期可直接作为分箱因子使用
# 加载依赖包 library(lubridate) library(dplyr) # 构造原始数据 df <- data.frame(dt1 = c("2019-05-02", "2019-01-02", "2019-06-02"), dt2 = c("2019-08-30", "2019-04-24", "2019-12-06") ) # 转换为日期格式 df <- df %>% mutate(across(c(dt1, dt2), ymd)) # 定义计数函数:输入起止日期,返回符合要求的月末数量 count_month_end <- function(start, end) { # 生成起止日期覆盖的所有月份序列 month_seq <- seq.Date(floor_date(start, unit = "month"), floor_date(end, unit = "month"), by = "month") # 计算所有月份的月末日期 end_dates <- ceiling_date(month_seq, unit = "month") - days(1) # 过滤出小于dt2的月末日期,返回统计数量 sum(end_dates < end) } # 计算val_count列 df <- df %>% rowwise() %>% mutate(val_count = count_month_end(dt1, dt2)) %>% ungroup() # 查看输出结果 print(df)
输出结果
dt1 dt2 val_count 1 2019-05-02 2019-08-30 3 2 2019-01-02 2019-04-24 3 3 2019-06-02 2019-12-06 6
如果需要提取分箱用的月末因子,仅需修改count_month_end函数返回过滤后的end_dates列表即可。
内容的提问来源于stack exchange,提问作者Vendetta
相关产品推荐
相关产品推荐

