使用循环根据单列中排列的日期之间的时间创建事件的开始和结束日期

问题描述

对于给定的记录ID,我有一个包含多个活动日期和事件指示符的数据集。

我想为每个记录ID标识事件的开始和结束日期或事件的持续时间(天)。事件由指示符(ind_type)的存在触发。在我的完整数据集中,指标之间的行均为NA,但已将它们过滤掉以计算日期差。一个事件包含一个时间段,在此期间或六个月内发生任何一种或多种类型的指标。在随后的ind_type活动在活动日期的6个月内发生的情况下,我计算了日期之间的差值,以确定是否已经过去6个月。在此示例中,我使用180天作为6个月过去的指标。在我的最终代码中,我将使用“ months(6)”。

决策规则如下:

  1. 新活动的开始定义为活动日期减去三个月
  2. 事件的结束发生在活动日期,当过去6个月没有发生新的活动日期/事件时。

我将最终结果设想为结构类似的数据框,并带有其他列,分别表示e1_start(事件1的开始日期),e1_end(事件1的结束日期),e2_start(事件2的开始日期),e2_end(事件2的结束日期)等我不确定我的完整数据集中ID可能拥有的最大事件数,但我确实知道有些记录将没有任何记录。

可以使用以下方法生成样本数据集:


    if (!require('pacman')) install.packages('pacman'); library(pacman) 
    p_load("dplyr","lubridate","tidyverse")
    
    id <- c(13,13,14,15,15)
    
    activity_date <- c("2018-08-19","2018-08-20","2018-08-21","2018-10-16","2016-03-21","2016-07-27","2016-10-18","2016-11-06","2017-06-10","2018-04-14","2018-04-20","2001-12-29","2002-02-24","2002-04-14","2002-04-29","2008-09-02","2008-09-23","2010-08-28") 
    
    ind_type <- c(3,3,1,1)
    
    sample <- bind_cols(id,activity_date,ind_type)
    
    colnames <- c("id","activity_date","indicator_type")
    
    names(sample) <- colnames
    
    sample <- sample %>% 
      group_by(id) %>% 
      mutate(activity_date = as_date(activity_date)) %>% 
      mutate(activity_diff = c(0,diff(activity_date)))

我认为最好的方法是遍历activity_date列,并将第一个事件开始标识为第一个活动日期减去三个月。然后,当activity_diff大于6个月(〜180天)时,我需要仔细查看每个后续日期,并将结束日期标识为与第一个实例相对应的活动日期。然后,我需要选择下一个日期并将其用作新事件的开始。依此类推...关于如何完成此操作的任何建议都是循环(或其他方式),值得赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)