【问题标题】:Merging two data.tables with many to one realtionship in R?在R中合并两个具有多对一关系的data.tables?
【发布时间】:2014-03-01 01:44:03
【问题描述】:

我有两个 data.table(s),其中表“DT1”是主表,我想合并第二个表“DT2”中的数据,该表的行与“DT1”中的一个或多个行匹配。我想保留 DT1 的所有列并从 DT2 添加其他列(最终会重复)。

DT1:
ID          DEP CAT BCC value
ZCC81899ZZ  31,HH2  2,039   BCC1    0
ZZ02362D    2FF2,2F 02,06   BCC1    0
ZZ42716D    384,338 2   BCC1    0
ZZ64457TZZ  389,391 01,02   BCC1    1
ZCC81899ZZ  31,HH2  20,390  BCC2    1
ZZ02362D    2FF2,2  2   BCC2    1
ZZ42716D    384,338 2   BCC2    1
ZZ64457TZZ  389,391 01,02   BCC2    1
ZZ66595ZZ   14,191  11,072  BCC2    0
ZCC81899ZZ  31,HH2  203 BCC6    0
ZZ02362D    2FF2    2   BCC6    1
ZZ42716D    384,338 2   BCC6    0
ZZ64457TZZ  389,391 01,02   BCC6    0
ZZ66595ZZ   141,914 11,072  BCC6    0


DT2:
BCC    LABEL     CO     IN
BCC1   Dim1      0.47   1.904
BCC2   Dim2      0.535  0.575
BCC6   Dim3      0.44   0.344

所以我想将这两个 data.table(s) 与密钥 BCC 合并,结果应该是:

DT1:
ID          DEP CAT BCC value    LABEL    CO    IN
ZCC81899ZZ  31,HH2  2,039   BCC1    0        Dim1     0.47  1.904
ZZ02362D    2FF2,2F 02,06   BCC1    0        Dim1     0.47  1.904
ZZ42716D    384,338 2   BCC1    0        Dim1     0.47  1.904
ZZ64457TZZ  389,391 01,02   BCC1    1        Dim1     0.47  1.904
ZCC81899ZZ  31,HH2  20,390  BCC2    1        Dim2     0.535 0.575
ZZ02362D    2FF2,2  2   BCC2    1        Dim2     0.535 0.575
ZZ42716D    384,338 2   BCC2    1        Dim2     0.535 0.575
ZZ64457TZZ  389,391 01,02   BCC2    1        Dim2     0.535 0.575
ZZ66595ZZ   14,191  11,072  BCC2    0        Dim2     0.535 0.575
ZCC81899ZZ  31,HH2  203 BCC6    0        Dim3     0.44  0.34
ZZ02362D    2FF2    2   BCC6    1        Dim3     0.44  0.34
ZZ42716D    384,338 2   BCC6    0        Dim3     0.44  0.34
ZZ64457TZZ  389,391 01,02   BCC6    0        Dim3     0.44  0.34
ZZ66595ZZ   141,914 11,072  BCC6    0        Dim3     0.44  0.34

我正在做以下事情:

> setkey(DT1, BCC)
> setkey(DT2, BCC)
> DT1[DT2, `:=`(LABEL= i.LABEL, CO = i.CO), IN = i.IN)]

它给出的结果与 DT1 相同,我尝试了 DT1[DT2] 也给出了相同的结果。我不知道我在哪里错过了这个。我猜这应该可行。任何帮助表示赞赏。

* 问题是我在使用“melt”操作后生成 DT1,当我调用 BCC 值(因子:数据类型)时,所有内容都以 .当我将两个表都作为命令传递时,它工作正常。所以我认为这是熔化操作后结果的问题。有没有其他方法可以重塑 data.table 中的数据?

【问题讨论】:

  • 试试merge(DT1, DT2,by="BCC")
  • 听起来像你想要的DT2[DT1]
  • *** 问题是我在使用“melt”操作后生成 DT1,当我调用 BCC 值(因子:数据类型)时,所有这些都以 的形式出现。当我将两个表都作为命令传递时,它工作正常。所以我认为这是熔化操作后结果的问题。有没有其他方法可以重塑 data.table 中的数据?
  • @nsDataSci 我建议使用dput 分享您遇到的问题的一个可重复的小示例
  • 你会不会 str(DT1)str(DT2) 告诉我们 BCC 对每个人说了什么?

标签: r data.table


【解决方案1】:

merge 命令允许一对多合并,默认情况下它只保留内连接(当 2 个表匹配时),但使用命令 all= ; all.x 和 all.y 允许你做任何你想做的其他选择

合并的帮助页面清楚地说明了这一点

【讨论】:

    猜你喜欢
    • 2014-08-18
    • 1970-01-01
    • 2019-03-17
    • 2021-12-20
    • 2022-08-21
    • 2012-10-27
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多