我有两个表,每个都包含一个字符变量,例如在表格g1中我有var1,其值为'女孩紧身裤','绑腿','leginggs','tops',而在g2我有var2价值观'女孩上衣','上衣','紧身裤','长紧身裤'。 我试图比较两个表中的这些字符值,并根据精度匹配具有最高精度匹配的行
我认为我可以使用一对多合并,然后只保留最高匹配的记录,例如
g $ comp< -levenshteinSim(g $ var1,g $ var2)
对于每个var1到所有var2,然后选择具有最高g $ comp的行。 但由于该表非常大,因此一对多合并可能会导致非常大量的数据集。 我想知道是否有办法使用R循环过程?无法想象任何更优雅,更快捷的方式来接近这一点。
任何帮助都将受到高度赞赏。
谢谢
答案 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