我有两个数据集,一个包含病人和他们的诊断;另一个包含患者和所施用的药物。
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
我希望我已经把我的问题说得足够清楚了...欢迎使用任何包的解决方案。
1条答案
按热度按时间rnmwe5a21#
这里有一种方法可以通过一些连接来实现。
步骤1 -从
df2
中删除行,该df2
在Patient-Year
组合的df1
中有超过1个Diagnosis
。这是使用anti_join
完成的。我们用它创建new_df2
。第2步-
df1
中每个Patient-Year
组合仅保留1名Diagnosis
患者,并将其与新df2
结合以获得结果。