我有两个数据表:
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() 向代码读者明确此意图。
你可以帮我吗?
两步加入:
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