【问题标题】:R merging tables, with different column names and retaining all columnsR合并表,具有不同的列名并保留所有列
【发布时间】:2021-09-07 01:36:35
【问题描述】:

我有一项大工作要合并两个大型 data.tables。这对我来说是新的,我需要向同事演示和解释。这就是偏执方法的原因,我想随机选择一些结果行来向我们保证合并正在做我们认为的事情!这是我的 MWE,谢谢。 J

library(data.table)
first <- data.table(index = c("a", "a", "b", "c", "c"),
                    type = 1:5,
                    value = 3:7)

second <- data.table(i2 = c("a", "a", "b", "c", "c"),
                    t2 = c(1:3, 7, 5), 
                    value = 5:9)

second[first , on=c(i2="index", t2="type"), nomatch=0L]

AFAIK 正确地完成了这项工作,并给出了这个结果


  i2 t2 value i.value
1:  a  1     5       3
2:  a  2     6       4
3:  b  3     7       5
4:  c  5     9       7

但是,如果可能,我希望保留两个表中的所有列,以便结果如下所示:

     i2     t2    index     type       value  i.value
1:  a        1      a         1          5       3
2:  a        2      a         2          6       4
3:  b        3      b         3          7       5
4:  c        5      c         5          9       7

是否可以保留所有列?

【问题讨论】:

  • 也许使用 dplyr::full_join(),但这是在转换您的数据....
  • 我认为没有办法直接从加入中做到这一点。但是连接不会给你错误的结果。如果您仍想检查并确保您是正确的,请重命名列,以便两个表具有相同的列名setnames(first, old = c("index", "type"), new = c("i2", "t2"))。这样就会知道joined 表上的i2t2 列同时引用firstsecond 表。

标签: r merge data.table multiple-columns


【解决方案1】:

是的,这是可能的:

second[first, on=c(i2="index", t2="type"), nomatch=0L, .(i2, t2, index, type, value, i.value)]

   i2 t2 index type value i.value
1:  a  1     a    1     5       3
2:  a  2     a    2     6       4
3:  b  3     b    3     7       5
4:  c  5     c    5     9       7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2020-10-20
    相关资源
    最近更新 更多