【问题标题】:Which type of join to use in R, tidyverse preferably在R中使用哪种类型的连接,最好是tidyverse
【发布时间】:2020-06-23 18:59:30
【问题描述】:

我认为这个问题的答案在文档中正盯着我看,但也许我只是在放屁,我想不通。

假设我有两张患者表,表 a 和表 b。

我知道两个表中的相同患者有一些重叠,我将加入他们的病历。

我想从 B 中获取所有我可能没有的新患者,并将它们添加到我预先存在的表 A 中。我只想留下 A 中的列,并且我不需要来自 A 的任何新列B. 两者之间可能存在重叠的列,如果它们在此上合并也很好,但病历编号是重要的。您会使用什么类型的联接?

谢谢

【问题讨论】:

  • 或许semi_join
  • @akrun 刚刚尝试了 semi_join,在它只保留表 A 中的列的意义上工作正常,但它删除了在 B 中找不到的患者。所以 A 现在少了。我希望 A 从 B 那里获得所有新患者,所以 A 会成长。如果这有意义?
  • 在这种情况下,可能是full_join
  • @akrun 刚刚尝试了 full_join,它从 B 中引入了我不需要的所有新列(尽管它确实吸引了患者)。我想我可以删除那些列,但它就像 300 个新列..
  • 我将在 B.B[c(1, 3, 5, 10)] 中加入所需的感兴趣的列子集,然后使用 full_join

标签: r tidyverse


【解决方案1】:

你可以只做一个 full join (你需要 full 从两个表中获取条目,left 只会让你从左表中获取条目)并使用从左侧数据框中选择列colnames 函数,因此您不必进行大量输入。假设您的医疗记录在两个数据框中具有相同的名称。

library(dplyr)

left = data.frame('medical_record' = 1:3, 'col_1' = 4:6, 'col_2' = 7:9)
right = data.frame('medical_record' = 3:5, 'col_3' = 3:5, 'col_4' = 1:3)

joined = left %>% 
  full_join(right) %>% 
  select(colnames(left))
head(left)
head(right)
head(joined)

输出:

> head(left)
  medical_record col_1 col_2
1              1     4     7
2              2     5     8
3              3     6     9
> head(right)
  medical_record col_3 col_4
1              3     3     1
2              4     4     2
3              5     5     3
> head(joined)
  medical_record col_1 col_2
1              1     4     7
2              2     5     8
3              3     6     9
4              4    NA    NA
5              5    NA    NA

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多