【问题标题】:join two tables such that we get all rows from tableA and all columns of matching rows from tableB [duplicate]连接两个表,以便我们从 tableA 中获取所有行,并从 tableB 中获取匹配行的所有列 [重复]
【发布时间】:2019-11-06 20:54:24
【问题描述】:

连接两个表,以便我们从 tableA 中获取所有行,并从 tableB 中获取所有匹配行的列

我想使用 data.table 而不是 data.Frame。请建议最快的方法。

tableA <- data.table(column1 = c( 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9))

tableB <- data.table(column1 = c( 1.0, 1.2, 1.5, 1.9), column2 = c( "A", "B", "C", "D"), column3 = c( "AA", "BB", "CC", "DD"))

预期结果:

    column1 column2 column3
 1:     1.0       A      AA
 2:     1.1    <NA>    <NA>
 3:     1.2       B      BB
 4:     1.3    <NA>    <NA>
 5:     1.4    <NA>    <NA>
 6:     1.5       C      CC
 7:     1.6    <NA>    <NA>
 8:     1.7    <NA>    <NA>
 9:     1.8    <NA>    <NA>
10:     1.9       D      DD

【问题讨论】:

  • 如果能用dput提供输入数据就好了
  • 我对 R 很陌生,请解释一下什么是 dput
  • 欢迎来到SO,请看如何提出一个好问题,有很多帖子,最有名的stackoverflow.com/questions/5963269/…。全面熟悉 R 代码,我必须进行一些繁重的编辑才能使您的问题具有可读性。

标签: r join data.table


【解决方案1】:

你只需要颠倒加入的顺序:

tableB[tableA, on = "column1"]

【讨论】:

    【解决方案2】:

    在处理较大的数据集时,执行更新连接可能会更好,以避免创建新对象...

    tableA[tableB, `:=`( column2 = i.column2, column3 = i.column3), on = .(column1)][]
    

    将根据两个表的 column1 中的值,将 tableB 中的 column2 和 column3 添加到 tableA。

    【讨论】:

    • 或者:tableA[, c("column2", "column3") := tableB[.SD, on = "column1", .(column2, column3)]]
    猜你喜欢
    • 2021-10-11
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多