合并两个data.tables,添加另一列并保留重复项

问题描述 投票:0回答:1

我有两个数据表:

Df1:(15.000 个观察值)

身份证
10101 8119500101
10601 13071516106
10601 13071516106
10800 8235500200

Df2:(45.000.000 个观测值)

来自
8119500101 13071516106
8235500200 8235500200
8119500101 8119500101

“ID”列、“from”和“to”列包含相同的值。我想匹配每个“ID”和“from”以及“ID”和“to”以添加列“NO”:

Df2:

来自 NO_from 不_
8119500101 13071516106 10101 10601
8235500200 8235500200 10800 10800
8119500101 8119500101 10101 10101

此外,对于某些“NO”值,没有匹配项,但是,我不想忽略它们,而是想保留它们以及重复项。:

Df2:

来自 NO_from 不_
8119500101 13071516106 10101 10601
8235500200 8235500200 10800 10800
8119500101 8119500101 10101 10101
不适用 不适用 00008 00008

我尝试过这个,但没有成功:

setDT(df2) [, "from_NO" := df1$NO[match(df2$from, df1$ID)],]
setDT(df2) [, "to_NO" := df1$NO[match(df2$to, df1$ID)],]

另外,我收到以下错误: 提供了 44571901 个项目,分配给“from_MT_Zone”列的 15782 个项目。如果您希望“回收”RHS,请使用rep() 向代码读者明确此意图。

你可以帮我吗?

merge duplicates data.table match
1个回答
0
投票

两步加入:

library(data.table)
setDT(Df1)
setDT(Df2)
Df2[Df1, NO_from := i.NO, on = .(from == ID)
  ][Df1, NO_to := i.NO, on = .(to == ID)][]
#          from          to NO_from NO_to
#         <num>       <num>   <int> <int>
# 1: 8119500101 13071516106   10101 10601
# 2: 8235500200  8235500200   10800 10800
# 3: 8119500101  8119500101   10101 10101
© www.soinside.com 2019 - 2024. All rights reserved.