针对单一疗法筛选具有多个条件的数据集

问题描述 投票:0回答:1

我有这个数据集,其中包含患者 ID、诊断日期、诊断、trt_date 和药物代码。

# Create the dataset
data <- data.frame(
  patient_id = c(1, 1, 1, 1, 5, 5, 7, 7),
  diagnosis_date = as.Date(c("1/9/10", "1/9/10", "1/9/10", "1/9/10", "1/11/10", "1/11/10", "1/9/10", "1/9/10"), format = "%m/%d/%y"),
  diagnosis = c("breast cancer", "breast cancer", "breast cancer", "breast cancer", "breast cancer", "breast cancer", "breast cancer", "breast cancer"),
  trt_date = as.Date(c("1/20/10", "1/20/10", "1/21/10", "1/21/10", "1/29/10", "1/30/10", "1/25/10", "1/26/10"), format = "%m/%d/%y"),
  drug_code = c("A", "B", "A", "A", "B", "A", "A", "A")
)

# Print the dataset
print(data)

过滤条件如下:

  • 患者 ID 1,首次治疗日期为 2010 年 1 月 20 日,接受了药物 A,但也在同一天接受了药物 B(第二条观察线)。这称为药物 A 和 B 的一线组合疗法,我们需要将其过滤掉。因此患者 id 1 将被过滤掉。

  • 患者 ID 5,首次治疗日期为 2010 年 1 月 29 日,仅接受药物 B,这称为药物 B 的一线单一疗法。

  • 患者 ID 7 的首次治疗日期为 2010 年 1 月 25 日,仅接受药物 A,这称为药物 A 的一线单一疗法。

因此,我想要观察到只有药物 A 的一线单药治疗和药物 B 的一线单药治疗,而不是药物 A 和 B 的一线组合治疗。

因此所需的输出将如下所示:

patient_id    diagnosis_date     diagnosis          trt_date    drug_code
5             2010-01-11         breast cancer      2010-01-29  B
5             2010-01-11         breast cancer      2010-01-30  A
7             2010-01-09         breast cancer      2010-01-25  A
7             2010-01-09         breast cancer      2010-01-26  A
7             2010-01-09         breast cancer      2010-01-27  C
r dataframe filter conditional-statements
1个回答
0
投票
library(dplyr)

data %>% 
  filter(lapply(list(drug_code), length) == 1, .by = c(patient_id, trt_date))

#>   patient_id diagnosis_date     diagnosis   trt_date drug_code
#> 1          5     2010-01-11 breast cancer 2010-01-29         B
#> 2          5     2010-01-11 breast cancer 2010-01-30         A
#> 3          7     2010-01-09 breast cancer 2010-01-25         A
#> 4          7     2010-01-09 breast cancer 2010-01-26         A

创建于 2024-03-27,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.