在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
相关产品推荐
相关产品推荐

