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

在R中按唯一ID计算指定事件间的间隔天数(含过滤)

R数据框分组计算事件间隔天数的实现方案

核心思路

按unique_id分组,先筛选出包含目标字符串(如"A_type"、"C_type")的事件,再为每个A类事件匹配其之后出现的首个C类事件,最终计算两者的日期间隔天数。

代码实现

首先加载依赖包:

library(tidyverse)
library(lubridate)

然后执行数据处理逻辑:

# 转换日期格式并筛选目标事件类型
df_processed <- df %>%
  mutate(event_date = ymd(event_date)) %>%
  filter(str_detect(event_type, "A_type|C_type"))

# 分组匹配每个A事件对应的首个后续C事件
result <- df_processed %>%
  group_by(unique_id) %>%
  mutate(
    # 为每个A事件查找同组中后续最早的C事件日期
    event_date_C = map_dbl(event_date, ~ if_else(
      str_detect(event_type, "A_type"),
      min(df_processed$event_date[
        df_processed$unique_id == cur_group()$unique_id & 
        df_processed$event_date > .x & 
        str_detect(df_processed$event_type, "C_type")
      ], na.rm = TRUE),
      NA_real_
    )),
    event_date_C = as_date(event_date_C)
  ) %>%
  # 仅保留有对应C事件的A事件行
  filter(str_detect(event_type, "A_type") & !is.na(event_date_C)) %>%
  # 重命名列并计算间隔天数
  rename(event_type_A = event_type, event_date_A = event_date) %>%
  mutate(
    event_type_C = "C_type_event",
    days_between = as.numeric(event_date_C - event_date_A)
  ) %>%
  select(unique_id, event_type_A, event_date_A, event_type_C, event_date_C, days_between)

# 查看结果
print(result)

代码说明

  1. 日期转换与事件筛选:用ymd()将字符型日期转为标准日期格式,通过str_detect()按字符串匹配筛选出A类和C类事件,满足多事件类型下的灵活过滤需求。
  2. 分组匹配事件:按unique_id分组后,用map_dbl()遍历每个A事件的日期,找到同组中在该日期之后的最早C事件日期。
  3. 结果整理:过滤掉无对应C事件的A事件,重命名列名并计算日期间隔天数,最终输出符合要求的结构。

运行结果

针对示例数据,运行后会得到所有A事件对应的首个后续C事件及间隔天数:

# A tibble: 4 × 6
# Groups:   unique_id [1]
  unique_id event_type_A  event_date_A event_type_C  event_date_C days_between
  <chr>     <chr>         <date>       <chr>         <date>               <dbl>
1 id_101    A_type_event  2022-01-01   C_type_event  2022-03-10              68
2 id_101    A_type_event  2022-02-15   C_type_event  2022-03-10              23
3 id_101    A_type_event  2022-02-28   C_type_event  2022-03-10              10
4 id_101    A_type_event  2022-03-20   C_type_event  2022-04-01              12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:15:41