根据条件从 table 中提取数据

Extract data from table with condition

我有数据。这是一个例子:

    A tibble: 1,296 x 4
       id treatmentstart protocoltype                PDL1_date 
    <dbl> <chr>          <chr>                       <chr>     
 1   1111 05/11/2020     Chemoradiation              05/03/2020
 2  22222 03/03/2021     Chemo plus PD-1 plus CTLA-4 01/03/2020
 3 333333 08/04/2018     Anti-VEGF plus Chemo        NA        
 4 444444 07/06/2019     Chemoradiation              03/08/2018
 5 555555 09/12/2020     Chemo plus PDl-1            07/11/2020
 6 666666 05/06/2018     PD-1                        08/02/2017
 7 666666 07/07/2018     Chemotherapy                08/02/2017
 8 777777 07/05/2019     Chemotherapy                06/03/2020
 9 999999 08/08/2018     Chemoradiation              08/05/2020
10 999999 12/07/2017     PDL-1                       08/05/2020

如您所见,部分ID重复,但处理方式不同(协议类型) 我需要提取满足以下条件的ID: 测试日期,较早的治疗开始日期,治疗类型都包含“PD1”或“PDL1”,如果ID有多个治疗,那么我需要比较治疗日期并选择最早的治疗日期并与测试日期进行比较,如果早点测试就适合,如果不适合就不行。
总之:只有那些在某种类型的治疗(“PD1”或“PDL1”)之前有测试日期并且在测试日期之前没有接受过任何其他治疗的人应该被选中。这是应该出现的示例:

A tibble: 1,296 x 4
       id treatmentstart protocoltype                PDL1_date 
    <dbl> <chr>          <chr>                       <chr>     
 1  22222 03/03/2021     Chemo plus PD-1 plus CTLA-4 01/03/2020
 2 555555 09/12/2020     Chemo plus PDl-1            07/11/2020
 6 666666 05/06/2018     PD-1                        08/02/2017

所以1111,44444,77777被治疗条件排除(未接受任何PD1/PDL1),333333没有PDL1_date,99999接受了PD-1并且在PDL1date之前,但在PDL1date之前接受了其他治疗.

我已经尝试过 dplyr 过滤器 (PDL1_date 请帮忙。

你必须分享一个可重现的数据来帮助你,但也许这可以帮助你:

data %>% 
      filter(grepl("PD-1|PD[Ll]-1",protocoltype)) %>%
      group_by(id) %>%
      filter(treatmentstart == min(treatmentstart)) %>% ungroup()