You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:24:04