【发布时间】: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