【发布时间】:2021-10-07 16:33:39
【问题描述】:
我有一个类似于我们在下面看到的数据。实际数据中,1个PATIENT_ID可能有2行以上。
df
# PATIENT_ID DRUG_CLASS start end duration
# <dbl> <chr> <date> <date> <drtn>
# 1 SU 2014-03-05 2016-08-04 883 days
# 1 DPP4 2016-07-22 2016-08-26 35 days
# 2 SU 2014-01-07 2017-06-23 1263 days
# 2 DPP4 2015-03-04 2017-12-27 1029 days
# 3 SU 2014-01-09 2014-12-05 330 days
# 3 SU 2015-01-08 2016-01-07 364 days
我想做的是为每个患者取第一行,但如果间隔与下一个间隔重叠,则在下一行中,我们将end 日期作为start 日期后续行- 1。示例:
- 对于第一个患者,由于
end日期大于下一行的start日期,即"2016-08-04">"2016-07-22",那么新的end日期应为"2016-07-21" - 同样,对于第二位患者,我们将新的
end日期设为"2015-03-04" - 1 = "2015-03-03" - 对于最后一位患者,由于没有重叠,所以按原样取第一行
最终数据:
df
# PATIENT_ID DRUG_CLASS start end
# <dbl> <chr> <date> <date>
# 1 SU 2014-03-05 2016-07-21
# 2 SU 2014-01-07 2015-03-03
# 3 SU 2014-01-09 2014-12-05
代码:
df <- structure(list(PATIENT_ID = c(1, 1, 2, 2, 3, 3), DRUG_CLASS = c("SU",
"DPP4", "SU", "DPP4", "SU", "SU"), start = structure(c(16134,
17004, 16077, 16498, 16079, 16443), class = "Date"), end = structure(c(17017,
17039, 17340, 17527, 16409, 16807), class = "Date"), duration = structure(c(883,
35, 1263, 1029, 330, 364), class = "difftime", units = "days")), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
【问题讨论】: