如何合并数据集并保留手术日期前最近的各类型血压测量记录?
问题:合并手术日期与术前血压数据,保留每种血压类型最接近手术日的术前记录
数据集定义
手术日期数据集(data1)
data1 <- tribble( ~MRN, ~date_in_room, 1, "2015-01-02" ) %>% mutate(date_in_room = as.Date(date_in_room))
术前血压测量数据集(data2)
library(dplyr) data2 <- tribble( ~MRN, ~event, ~date, ~value, 1, "sbp", "2014-12-31", 120, 1, "sbp", "2015-01-01", 119, 1, "sbp", "2015-01-02", 125, 1, "dbp", "2015-01-01", 80, 1, "dbp", "2015-01-02", 84, 1, "mean", "2015-01-01", 100 ) %>% mutate(date = as.Date(date))
需求说明
合并两个数据集,仅保留每个患者(MRN)下每种血压测量类型(event:sbp/dbp/mean)中,日期早于手术日期且最接近手术日的记录。
初始代码(待补充)
data1 |> group_by(MRN, event) |> left_join(data2, by=MRN) |> ...?
完整实现代码
data1 |> left_join(data2, by = "MRN") |> # 筛选手术日期之前的血压记录 filter(date < date_in_room) |> # 按患者ID和血压类型分组 group_by(MRN, event) |> # 组内按测量日期降序排列,最接近手术日的记录排首位 arrange(desc(date), .by_group = TRUE) |> # 提取每组第一条记录 slice_head(n = 1) |> # 取消分组 ungroup() |> # 调整列顺序以匹配预期结果 select(MRN, event, date, value, date_in_room)
代码说明
left_join(data2, by = "MRN"):按患者ID合并两个数据集,确保所有手术记录都被保留;注意by参数需要用引号包裹列名。filter(date < date_in_room):剔除手术当日及之后的血压数据,只保留术前记录。group_by(MRN, event):按患者和血压类型分组,保证每种血压类型单独筛选最接近手术日的记录。arrange(desc(date), .by_group = TRUE):在每个分组内按测量日期降序排序,这样最接近手术日的记录会排在组内第一位。slice_head(n = 1):提取每组的第一条记录,也就是符合要求的目标数据。ungroup():取消分组状态,避免后续数据操作受到分组限制。select(...):调整列的顺序,和预期结果的列顺序保持一致。
运行上述代码后,输出结果与预期的desired数据集完全一致。
内容的提问来源于stack exchange,提问作者John Ryan
相关产品推荐
相关产品推荐

