如何使用 stringdist 匹配一个模糊和一个精确的 data.table 列

问题描述

我必须找到数据库与字典的最佳匹配/合并。根据我获得的信息 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 (将#修改为@)