折叠行并保留 highest/lowest 个日期

Collapse rows and keep highest/lowest dates

我想折叠包含入院日期、出院日期和住院原因的多行。 但我只想保留按ID和停留原因分组的最早入院日期和最晚出院日期。

我的数据框如下所示:

结构(列表(入学日期=结构(c(16709, 16710, 16713, 16714, 16715, 16729, 16730, 16731, 16735, 16741, 16742, 16787, 16790, 16792, 16797, 16798, 16799), class = "日期"), 放电日期 = 结构(c(16709, 16710, 16713, 16714, 16715, 16729, 16730, 16731, 16735, 16741, 16742, 16787, 16790, 16792, 16797, 16798, 16799), class = "日期"), ID = c(1010091262, 1010091262, 1010091262, 1010091262, 1010091262, 1010091262, 1010091262, 1010091262, 1010091262, 1010091262, 1010091262, 1640300380, 1640300380, 1640300380, 1640300380, 1640300380, 1640300380), CauseOfStay = c("Folge: Hirninfarkt", "Folge: Hirninfarkt", "Folge: Hirninfarkt", "Folge: Hirninfarkt", "Folge: Hirninfarkt", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl", "Schädigung: Hirn, anoxisch, aonkl")), row.names = c(1L, 2L, 3L, 4L, 5L, 15L, 16L, 17L, 18L, 19L, 20L, 60L, 61L, 62L, 63L, 64L, 65L), class = "data.frame")

输出应包含 3 行,按停留原因和 ID 分组的最早入院日期、最晚出院日期。

您可以使用 group_by / summarize.. 您可以将您的患者标识符 (ID) 添加到 group_by() 子句以允许不同的患者有不同的汇总行,对于相同的逗留原因

dat %>%
  group_by(ID, CauseOfStay) %>%
  summarize(AdmissionDate = min(AdmissionDate, na.rm=T),
            DischargeDate = max(DischargeDate, na.rm=T))

输出:

          ID CauseOfStay                       AdmissionDate DischargeDate
       <dbl> <chr>                             <date>        <date>       
1 1010091262 Folge: Hirninfarkt                2015-10-01    2015-10-07   
2 1010091262 Schädigung: Hirn, anoxisch, aonkl 2015-10-21    2015-11-03   
3 1640300380 Schädigung: Hirn, anoxisch, aonkl 2015-12-18    2015-12-30