R语言 当某个特定值在组的所有观测中不相同时,移除该组的所有观测

dced5bon  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(139)

我有两个数据集,一个包含病人和他们的诊断;另一个包含患者和所施用的药物。

df1 <- data.frame(
  Patient = c("John", "John", "John", "Jane", "Jane", "Mary", "Mary"),
  Year = c(2018, 2018, 2019, 2020, 2021, 2018, 2018),
  Diagnosis = c("a","b","a","b","a","a","a")
)

df2 <- data.frame(
  Patient = c("John", "John", "Jane", "Jane", "Mary"),
  Year = c(2018, 2019, 2018, 2021, 2018),
  Medication = c("Drug A", "Drug A", "Drug A", "Drug B", "Drug B")
)

我希望明确地匹配诊断和药物。问题是数据只包含每个患者每年的一种药物,但患者每年可以有任意数量的诊断。因此,当患者在一年中有不止一个唯一的诊断时,我不知道该药物是针对哪个诊断给药的。因此,如果存在不确定性,即每个患者每年不止一个诊断,我想从我的数据中删除该组。

library(dplyr)

df_merge <- df1 %>%
  full_join(., df2, by=c("Patient", "Year"))

df_merge 

  Patient Year Diagnosis Medication
1    John 2018         a     Drug A
2    John 2018         b     Drug A
3    John 2019         a     Drug A
4    Jane 2020         b       <NA>
5    Jane 2021         a     Drug B
6    Mary 2018         a     Drug B
7    Mary 2018         a     Drug B
8    Jane 2018      <NA>     Drug A

在本例中,我无法判断John在2018年是否因诊断“a”或“B”接受了一次记录药物,因此我希望删除他2018年的记录。玛丽在2018年也有两次诊断,但由于两次诊断相同,因此无所谓;我知道她服用“B药”的原因是什么,由于玛丽的两份记录都是重复的,我只想保留一个观察结果,用简单的英语来说,我的规则应该是这样的:
“如果患者-年-组的所有行中特定列中的值不相同,则应丢弃该组”......并删除重复项,但我知道这一点......;- )
根据此规则,我所需的数据集如下所示:

Patient Year Diagnosis Medication
1    John 2019         a     Drug A
2    Jane 2020         b       <NA>
3    Jane 2021         a     Drug B
4    Mary 2018         a     Drug B
5    Jane 2018      <NA>     Drug A

我希望我已经把我的问题说得足够清楚了...欢迎使用任何包的解决方案。

rnmwe5a2

rnmwe5a21#

这里有一种方法可以通过一些连接来实现。
步骤1 -从df2中删除行,该df2Patient-Year组合的df1中有超过1个Diagnosis。这是使用anti_join完成的。我们用它创建new_df2
第2步-df1中每个Patient-Year组合仅保留1名Diagnosis患者,并将其与新df2结合以获得结果。

library(dplyr)

new_df2 <- df2 %>%
  anti_join(df1 %>%
  filter(n_distinct(Diagnosis) > 1, .by = c(Patient, Year)) %>%
  distinct(Patient, Year), by = join_by(Patient, Year)) 

df1 %>%
  filter(n_distinct(Diagnosis) == 1, .by = c(Patient, Year)) %>%
  distinct() %>%
  full_join(new_df2, by = join_by(Patient, Year))
  

#  Patient Year Diagnosis Medication
#1    John 2019         a     Drug A
#2    Jane 2020         b       <NA>
#3    Jane 2021         a     Drug B
#4    Mary 2018         a     Drug B
#5    Jane 2018      <NA>     Drug A

相关问题