我在一个数据框中有一个相当大的数据集,其中包含大约 400,000 个不同的客户端名称。一些名称被用户多次输入错误。通常,名称不完全匹配但非常接近(即“Bob's Garage”和“Bob's Garage Inc”)。我想使用 tidy_stringdist 来识别那些紧密配对以进行调查和清理,但在实施时遇到了麻烦。
问题 1:要比较的所有可能名称配对的数据集太大。我可以运行第一个单词及其所有对,仅将结果保持在某个权重阈值以上,然后转到下一个单词并重复到最后吗?
问题 2:当我创建要比较的名称配对时,我还想保留该名称的 ID 和 data_source 吗?原因是我稍后需要使用 ID 和 data_source 重新连接到另一个表。
问题 3:我想通过 data_source 运行分析(因此仅在 data_source 相同时测试名称配对)。
问题 4:从结果中,我想排除 weight = 1 时的情况,但前提是该对的 ID 相同。这是一个小样本数据集:
data_source <- c("aaa", "aaa", "aaa", "aaa", "aaa"
, "bbb", "bbb", "bbb", "bbb", "bbb")
name <- c("tom's cleaners", "betty clan", "betty clan", "betty stan", "cvs"
, "crickets", "bats r us", "cvs", "cats r us", "dogs and bubbles")
id <- c(1000:1009)
df <- tibble(data_source, id, name)
我尝试了以下方法:
library(tidystringdist)
library(tidyverse)
name_pairs <- tidy_comb_all(df$name, df$name)
results <- tidy_stringdist(name_pairs) %>%
mutate(weight = 1 - jaccard) %>%
select(V1, V2, weight) %>%
filter(weight > .5) %>%
arrange(desc(weight))
我理想的输出将是一个看起来像这样的数据框:
V1_data_source | V1_id | V1_名称 | V2_data_source| V2_id | V2_名称 | 重量
感谢您提供的任何帮助。