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

在R语言中统计时间区间内的日期数量

统计每个日期终点的30天区间内的日期数量

嘿,针对你要统计每个日期作为终点的30天区间内日期数量的需求,我结合你给出的代码片段,整理了完整的实现方案:

首先我们需要加载处理日期和数据的两个核心包:lubridate用于日期区间的创建和判断,dplyr用于数据的管道式处理。

library(lubridate)
library(dplyr)

接着构建示例数据集,和你给出的一致:

df = data.frame(
  id = c(1, 2, 3, 4, 5, 6),
  dates = as.Date(c('2017-01-15', '2017-01-17', '2017-02-01', '2017-02-12', '2017-03-30', '2017-04-01'))
)

然后为每个日期生成对应的30天区间——以当前日期为终点,往前推30天作为起点:

df <- df %>% mutate(interval = interval(dates - 30, dates))

你提到用sum(df$dates %within% df$interval[5])可以得到第5个区间内的日期数量(结果为1,确实只有2017-03-30自己落在这个区间里)。如果要批量统计所有区间的数量,我们可以用rowwise()逐行处理每个区间,再统计符合条件的日期总数:

df <- df %>%
  rowwise() %>%
  mutate(count = sum(dates %within% interval)) %>%
  ungroup()

运行这段代码后,df会新增一列count,每一行的值就是对应日期区间内包含的所有日期的数量。比如第6行的区间是2017-03-02到2017-04-01,会包含2017-03-30和2017-04-01两个日期,所以count值为2。

这里的关键函数是%within%,它是lubridate提供的便捷工具,用来快速判断一个日期是否落在指定的时间区间内;而rowwise()则让我们可以对每一行的区间单独进行统计,避免批量处理时的逻辑混乱。

内容的提问来源于stack exchange,提问作者Philip Hofmeister

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:36:20