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

如何在R语言中按不规则时间间隔分组汇总数据?

按不规则时间间隔分组汇总数据的实现方案

当然可以实现!用R处理不规则时间间隔的分组汇总完全没问题,核心思路是先给每个日期分配对应的「间隔组标签」,再按这个标签分组计算就行。下面结合你提到的几种场景(11天、3个月、2年)给出具体代码示例:

1. 按11天间隔分组

我们可以先把日期转换成数值型(从起始日期算起的天数),再用取整函数按11天为单位划分组:

library(dplyr)
library(lubridate)

# 复用你提供的数据集
date_decision_made = seq(as.Date("2014/1/1"), as.Date("2016/1/1"), by="day")
property_damages_in_dollars <- rnorm(731, 100, 10)
final_data <- data.frame(date_decision_made, property_damages_in_dollars)

# 11天间隔分组逻辑
final_data %>%
  mutate(
    date = as.Date(date_decision_made),
    # 计算从起始日开始的天数,按11天取整生成组标签
    interval_11d = floor((date - min(date)) / 11)
  ) %>%
  group_by(interval_11d) %>%
  summarise(
    # 补充每组起止日期,让结果更直观
    start_date = min(date),
    end_date = max(date),
    total_damage = sum(property_damages_in_dollars, na.rm = TRUE),
    obs_count = n()
  )

2. 按3个月间隔分组

这里可以借助lubridate的日期处理函数,通过计算月份差来分组,也可以直接用季度(刚好是3个月)来简化操作:

# 方式一:通过月份差手动计算3个月组
final_data %>%
  mutate(
    date = as.Date(date_decision_made),
    # 将年份+月份转换成连续数值,再按3个月取整
    interval_3m = floor((year(date)*12 + month(date) - (year(min(date))*12 + month(min(date)))) / 3)
  ) %>%
  group_by(interval_3m) %>%
  summarise(
    start_date = min(date),
    end_date = max(date),
    total_damage = sum(property_damages_in_dollars, na.rm = TRUE),
    obs_count = n()
  )

# 方式二:用floor_date直接按季度分组(更简洁)
final_data %>%
  mutate(
    date = as.Date(date_decision_made),
    interval_3m = floor_date(date, unit = "quarter")
  ) %>%
  group_by(interval_3m) %>%
  summarise(
    total_damage = sum(property_damages_in_dollars, na.rm = TRUE),
    obs_count = n()
  )

3. 按2年间隔分组

和3个月的思路类似,通过计算年份差来划分2年一组的区间:

final_data %>%
  mutate(
    date = as.Date(date_decision_made),
    # 计算从起始年份开始的2年组标签
    interval_2y = floor((year(date) - year(min(date))) / 2)
  ) %>%
  group_by(interval_2y) %>%
  summarise(
    start_date = min(date),
    end_date = max(date),
    total_damage = sum(property_damages_in_dollars, na.rm = TRUE),
    obs_count = n()
  )

通用思路总结

不管是哪种不规则间隔,核心步骤都是:

  • 把日期转换成可计算的连续数值(天数、月份数、年份数)
  • 用floor()对数值按间隔大小取整,生成唯一的组标签
  • 按组标签分组后进行汇总计算

这样就能灵活处理任意时间间隔的分组需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:08:22