我有两个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]也给出了相同的结果。我不知道我在哪里错过了这个。这应该是我的工作。任何帮助表示赞赏。
* 问题是我在使用“熔化”操作后生成DT1,并且当我调用BCC值(因子:数据类型)并且所有来自时。当我将两个表作为命令传递时它工作正常。所以我认为这是融化操作后结果的问题。还有其他方法可以在data.table中重塑数据吗?
答案 0 :(得分:0)
merge命令允许一对多合并,默认情况下它只保留内连接(当2个表匹配时),但是使用命令all =; all.x和all.y允许你做任何你想要的选择
合并帮助页面明确了