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

如何按类别对多地点时间序列的连续日期进行分组?

解决方案

问题分析

你需要按地点(location)、分类(category)以及连续日期段分组汇总,原代码存在三个核心问题:

  • 未将location和category纳入分组依据,会导致不同地点/分类的连续日期被错误合并
  • mutate中使用==是逻辑判断而非赋值,属于语法错误
  • 日期差计算总天数时未考虑“天数差+1”的逻辑(比如两天连续的日期差是1,但总天数是2)

正确代码

先确保Date列为日期格式(如果原始数据不是的话),再用dplyr完成分组汇总:

# 转换Date列为日期格式(若原始数据为字符型则执行)
df$Date <- as.Date(df$Date)

# 生成目标数据框
new_df <- df %>%
  # 第一步:按地点和分类分组,在组内标记连续日期块
  group_by(location, category) %>%
  mutate(
    # 标记连续日期分组:首行设为TRUE,后续行若与上一行日期差≠1则新建分组
    date_grp = cumsum(c(TRUE, diff(Date) != 1))
  ) %>%
  # 第二步:按地点、分类、连续日期块分组,汇总计算
  group_by(location, category, date_grp) %>%
  summarise(
    start_date = min(Date),
    end_date = max(Date),
    total_days = as.integer(end_date - start_date) + 1
  ) %>%
  # 移除临时分组列,调整列顺序
  ungroup() %>%
  select(location, start_date, end_date, total_days, category)

运行结果

执行后得到的new_df与你期望的结果完全一致:

locationstart_dateend_datetotal_dayscategory
site12007-11-032007-11-042cat1
site12007-11-052007-11-051cat3
site12007-11-062007-11-072cat2
site22007-11-062007-11-072cat2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:45:08