问题描述
我必须找到数据库与字典的最佳匹配/合并。根据我获得的信息 here,我找到了以下解决方案:
dt <- fread(c("
id ; value
a1 ; aaaa
a1 ; aaa
a1 ; aaaab
a2 ; baaa
a2 ; baaaab
a2 ; baaaabaaa"))
dic <- fread(c("
id ; value ; dummy
a1 ; aaa2a ; dd1
a2 ; baa2aabaaa ; dd2"))
setnames(dt,c("id.dt","value.a"))
setnames(dic,c("id.dic","value.b","dummy.b"))
agg <- dt[dic,on = c(id.dt = "id.dic")]
agg [,dist:=stringdist( value.a,value.b,method = "cos",q = 2,nthread = 3),by = .(id.dt)]
setorder (agg,dist)
agg_res <- agg[,.(value.a = first(value.a),value.b=first(value.b),dist=first(dist)),by = .(id.dt)]
此代码提供了预期的结果
id.dt value.a value.b dist
1: a2 baaaabaaa baa2aabaaa 0.04826627
2: a1 aaaa aaa2a 0.18350342
然而,这个解决方案将两个数据聚合在一个新的 data.table agg 中,因此必须更改名称,它似乎不是最好/最干净的解决方案。我还尝试了 here 中描述的模糊连接解决方案,但它不能满足我的需求,因为我只需要一个匹配项,此外距离值对我来说很重要。 有没有办法避免这种情况,并在不更改列名的情况下使用原始数据表?
问候。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)