R代码:找到具有指定精度的类似匹配

时间:2017-11-13 18:17:16

标签: r character match

我有两个表,每个都包含一个字符变量,例如在表格g1中我有var1,其值为'女孩紧身裤','绑腿','leginggs','tops',而在g2我有var2价值观'女孩上衣','上衣','紧身裤','长紧身裤'。 我试图比较两个表中的这些字符值,并根据精度匹配具有最高精度匹配的行

我认为我可以使用一对多合并,然后只保留最高匹配的记录,例如

g $ comp< -levenshteinSim(g $ var1,g $ var2)

对于每个var1到所有var2,然后选择具有最高g $ comp的行。 但由于该表非常大,因此一对多合并可能会导致非常大量的数据集。 我想知道是否有办法使用R循环过程?无法想象任何更优雅,更快捷的方式来接近这一点。

任何帮助都将受到高度赞赏。

谢谢

2 个答案:

答案 0 :(得分:0)

你可以使用lapply函数和agrep(近似grep)这是模糊的字符串匹配,它的基础r;根据我的需要,这比library(stringi)更好,你也可以探索

lapply(g$var1, agrep, x=g$var2, max.distance=0.05, value=T)

答案 1 :(得分:0)

library(dplyr)
library(purrr)
library(RecordLinkage)

tbl1 <- data_frame(var1 = c('girls leggings', 'leggings', 'leginggs', 'tops'),
                   var2 = c('girls tops', 'tops', 'leggings', 'long leggings'))


cross2(.x = tbl1$var1, .y = tbl1$var2, .filter = ~levenshteinSim(.x, .y) < 0.4) %>% 
  map(set_names, c("var1", "var2")) %>% bind_rows()

输出:

# A tibble: 9 x 2
           var1          var2
          <chr>         <chr>
  1 girls leggings    girls tops
  2           tops    girls tops
  3           tops          tops
  4 girls leggings      leggings
  5       leggings      leggings
  6       leginggs      leggings
  7 girls leggings long leggings
  8       leggings long leggings
  9       leginggs long leggings
相关问题