如何解决使用循环根据单列中排列的日期之间的时间创建事件的开始和结束日期
对于给定的记录ID,我有一个包含多个活动日期和事件指示符的数据集。
我想为每个记录ID标识事件的开始和结束日期或事件的持续时间(天)。事件由指示符(ind_type)的存在触发。在我的完整数据集中,指标之间的行均为NA,但已将它们过滤掉以计算日期差。一个事件包含一个时间段,在此期间或六个月内发生任何一种或多种类型的指标。在随后的ind_type活动在活动日期的6个月内发生的情况下,我计算了日期之间的差值,以确定是否已经过去6个月。在此示例中,我使用180天作为6个月过去的指标。在我的最终代码中,我将使用“ months(6)”。
决策规则如下:
- 新活动的开始定义为活动日期减去三个月
- 事件的结束发生在活动日期,当过去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 举报,一经查实,本站将立刻删除。