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

R语言基于日期列Lag/Lead规则创建分组标识列问题求助

问题原因

你原先的代码写反了判断逻辑:规则是当前行的serv_from_dt匹配上一行的serv_to_dt/date_plus1,不是上一行的serv_from_dt匹配当前行的其他列。

解决方案

tidyverse 实现

library(dplyr)
ex %>%
  mutate(
    # 判断当前行是否和上一行属于同一分组
    is_same_group = serv_from_dt == lag(serv_to_dt, default = first(serv_to_dt) - 2) | 
                    serv_from_dt == lag(date_plus1, default = first(date_plus1) - 2),
    # 累计求和生成分组ID,不符合同组条件时序号+1
    identifier = as.character(cumsum(!is_same_group))
  ) %>%
  select(-is_same_group)

data.table 原生实现(更适配大数据量场景)

library(data.table)
setDT(ex)
ex[, identifier := as.character(cumsum(
  serv_from_dt != shift(serv_to_dt, fill = first(serv_to_dt) - 2) & 
  serv_from_dt != shift(date_plus1, fill = first(date_plus1) - 2)
))]

结果验证

运行上述代码后得到的identifier列和你给出的期望结果完全一致:"1","1","2","2","2","2","2","3","3"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:45:04