r-按sentinel事件对不规则时间序列数据进行分组



我有数百名患者的df和在不同日期测量的实验室值。实验室是以不规则的时间间隔绘制的。我很想看看这个值是否上升到临界点(例如,是以前值基线的1.5倍(,需要将其标记为事件。如果实验室值是在7天内取的,我需要将这些条目组合在一起;事件";,如果事件发生在该事件集中,则应标记整个事件。在标记的事件中,我需要标记该值何时高于其基线的1.2倍,当该值上升/下降到基线的1.2 x时,这将用于标记事件的真实开始/结束时间。如果两集在7天内发生,我需要将两集中以及两集之间的所有值标记为一集。我的最终目标是计算;剧集";并最终排除该事件中的值以供稍后分析。

我可以使用dplyr/mutate制作一个新的列来标记各个哨点事件,但我很难弄清楚如何将行分组为7天的事件。

任何帮助都将不胜感激!

示例dput df

structure(list(ID = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3
), lab = c(0.9, 1.2, 1.4, 1, 1, 1.4, 1.6, 1.9, 1.5, 1.4, 1.4, 
1.6, 1.8, 1.5, 1.3, 1.3, 1, 1, 1.7, 1.4, 1.4, 1.6), date = structure(c(13375, 
13378, 13380, 13382, 13386, 16559, 16630, 16633, 16648, 17065, 
17070, 17091, 17093, 17096, 17172, 17225, 17871, 18033, 18158, 
18162, 18278, 18635), class = "Date")), row.names = c(NA, -22L
), class = c("tbl_df", "tbl", "data.frame")) 

只有部分答案,因为您的问题非常复杂。我将解释如何将你的约会分组为";集";。我建议的方法是使用层次聚类。用方法";完整的";并且截止设置为7,则一集内的所有日期都在7天半径内。相反,如果你想让一集包括与同一集群中至少一名成员的距离小于7天的所有约会,你应该考虑";单个";链接方法。

df |>
group_by(ID) |>
mutate(event = lab > lab[1] * 1.5) |>
mutate(episode = {
dist(date) |>
hclust(method = "complete") |>
cutree(h = 7)
}) |>
group_by(ID, episode) |>
mutate(flag = any(event)) |>
as.data.frame()

##>    ID lab       date event episode  flag
##> 1   1 0.9 2006-08-15 FALSE       1  TRUE
##> 2   1 1.2 2006-08-18 FALSE       1  TRUE
##> 3   1 1.4 2006-08-20  TRUE       1  TRUE
##> 4   1 1.0 2006-08-22 FALSE       1  TRUE
##> 5   1 1.0 2006-08-26 FALSE       2 FALSE
##> 6   2 1.4 2015-05-04 FALSE       1 FALSE
##> 7   2 1.6 2015-07-14 FALSE       2 FALSE
##> 8   2 1.9 2015-07-17 FALSE       2 FALSE
##> 9   2 1.5 2015-08-01 FALSE       3 FALSE
##> 10  2 1.4 2016-09-21 FALSE       4 FALSE
##> 11  2 1.4 2016-09-26 FALSE       4 FALSE
##> 12  2 1.6 2016-10-17 FALSE       5 FALSE
##> 13  2 1.8 2016-10-19 FALSE       5 FALSE
##> 14  2 1.5 2016-10-22 FALSE       5 FALSE
##> 15  2 1.3 2017-01-06 FALSE       6 FALSE
##> 16  2 1.3 2017-02-28 FALSE       7 FALSE
##> 17  3 1.0 2018-12-06 FALSE       1 FALSE
##> 18  3 1.0 2019-05-17 FALSE       2 FALSE
##> 19  3 1.7 2019-09-19  TRUE       3  TRUE
##> 20  3 1.4 2019-09-23 FALSE       3  TRUE
##> 21  3 1.4 2020-01-17 FALSE       4 FALSE
##> 22  3 1.6 2021-01-08  TRUE       5  TRUE

最新更新