【发布时间】:2024-01-01 12:22:01
【问题描述】:
我有患者口服DM药物处方数据,即DPP4和SU,想了解患者是否同时服用药物(即同一患者内DPP4和SU是否存在重叠区间ID )。
样本数据:
ID DRUG START END
1 1 DPP4 2020-01-01 2020-01-20
2 1 DPP4 2020-03-01 2020-04-01
3 1 SU 2020-03-15 2020-04-30
4 2 SU 2020-10-01 2020-10-31
5 2 DPP4 2020-12-01 2020-12-31
在上面的示例数据中,
-
ID == 1,患者同时患有 DPP4 和 SU,从2020-03-15到2020-04-01。 -
ID == 2,患者已分别服用两种药物。
我想将数据分成 2 份,一份用于 DPP4,另一份用于 SU。然后,进行完全连接,并将每个 DPP4 间隔与每个 SU 间隔进行比较。这对于小数据可能没问题,但如果患者有 5 行 DPP4 和另外 5 行 SU,我们将进行 25 次比较,这可能效率不高。加上超过 10000 名患者。
我不知道该怎么做。
新数据:
希望有一个像这样的新df。 或者任何整洁的东西。
ID DRUG START END
1 1 DPP4-SU 2020-03-15 2020-04-01
2 2 <NA> <NA> <NA>
数据代码:
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L), DRUG = c("DPP4", "DPP4",
"SU", "SU", "DPP4"), START = structure(c(18262, 18322, 18336,
18536, 18597), class = "Date"), END = structure(c(18281, 18353,
18382, 18566, 18627), class = "Date")), class = "data.frame", row.names = c(NA,
-5L))
df_new <- structure(list(ID = 1:2, DRUG = c("DPP4-SU", NA), START = structure(c(18336,
NA), class = "Date"), END = structure(c(18353, NA), class = "Date")), class = "data.frame", row.names = c(NA,
-2L))
编辑: 我认为从我给出的样本数据来看,似乎只能有 1 个相交区间。但可能还有更多。所以,我认为这将是更好的数据来说明。
structure(list(ID = c(3, 3, 3, 3, 3, 3, 3), DRUG = c("DPP4",
"DPP4", "SU", "SU", "DPP4", "DPP4", "DPP4"), START = structure(c(17004,
17383, 17383, 17418, 17437, 17649, 17676), class = c("IDate",
"Date")), END = structure(c(17039, 17405, 17405, 17521, 17625,
17669, 17711), class = c("IDate", "Date")), duration = c(35L,
22L, 22L, 103L, 188L, 20L, 35L), INDEX = c(1L, 0L, 0L, 0L, 0L,
0L, 0L)), row.names = c(NA, -7L), class = c("tbl_df", "tbl",
"data.frame"))
【问题讨论】:
-
你只有2种药吗?不超过 2 个?
-
是的,只有 2 种药物。但患者可能对每种药物有多个处方间隔。并且每种药物可能有不同的编号。处方。
-
你可以看到我的更新
标签: r performance dplyr tidyr data-manipulation