0

我在一个数据框中有一个相当大的数据集,其中包含大约 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_名称 | 重量

感谢您提供的任何帮助。

4

0 回答 0