【问题标题】:Can data table do a left join for 3 or more data tables?数据表可以对3个或更多数据表进行左连接吗?
【发布时间】:2014-02-20 04:48:12
【问题描述】:

我已经搜索了这个简单问题的答案,但找不到类似的问题。我有 3 个数据表:

set.seed(0)
demo <- data.table(id = 1:10, demo.var = rnorm(10), key = 'id'); demo
lab <- data.table(id = 1:7, tc = rnorm(7), key = 'id'); lab
anthro <- data.table(id = 4:9, bmi = rnorm(6), key = 'id'); anthro

lab 和 anthro 中的所有 ID 都在 demo data.table 中,但 lab 和 anthro 包含 demo 中 ID 的不同子集

两个

lab[demo]
anthro[demo]

提供我想要的信息:所有 10 个 ID 以及来自 lab 或 anthro data.table 的附加信息,但是是否有一种方法可以以类似的方式将所有 3 个 ID 合并在一起?我尝试了一些排列,例如

anthro[lab][demo]

但这只会保留实验室 data.table 中 ID 的人类信息 - 没有 ID 8 和 9 的人类信息

提前感谢您的帮助

【问题讨论】:

  • +1 用于以简单易用的格式提供数据作为答案;希望每个人都这样做。
  • B[A] 进行左连接,而不是完全外连接...如果这确实是您要查找的内容,那么您可以编辑标题吗? (虽然这里因为demo 拥有您想要加入的所有值,但它按预期工作)。

标签: r data.table outer-join


【解决方案1】:
anthro[lab[demo]]
#      id        bmi         tc     demo.var
#   1:  1         NA  0.7635935  1.262954285
#   2:  2         NA -0.7990092 -0.326233361
#   3:  3         NA -1.1476570  1.329799263
#   4:  4 -0.8919211 -0.2894616  1.272429321
#   5:  5  0.4356833 -0.2992151  0.414641434
#   6:  6 -1.2375384 -0.4115108 -1.539950042
#   7:  7 -0.2242679  0.2522234 -0.928567035
#   8:  8  0.3773956         NA -0.294720447
#   9:  9  0.1333364         NA -0.005767173
#  10: 10         NA         NA  2.404653389

内表始终是执行外连接的表,因此这种嵌套确保具有超集索引值的表始终是内表。

【讨论】:

  • 谢谢 - 无法相信答案是多么简单,而且在被指出后它是如此明显
猜你喜欢
  • 2017-10-16
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多