我有一个大约一百万人的名单 - 每个人都用他/她的姓名来识别。个人可能不止一次出现在列表中。我想按个人对观察进行分组,并计算它们出现的次数 - 这通常可以,并使用dplyr::group_by
进行。
但是,有拼写错误。为了解决这个问题,我想到了在这个列表中计算字符串距离的度量。然后我会继续并假设如果字符串距离低于某个阈值,则记录识别同一个人。
到目前为止,我尝试过的所有方法要么过于耗时,要么显然不可行。
这是我尝试使用dplyr
和RecordLinkage
:
list_matrix <- expand.grid(x = individual_list, pattern = individual_list, stringsAsFactors = F)
# The same is achieved using stringdistmatrix (stringdist package)
result <- list_matrix %>%
group_by(x) %>%
mutate(similarity = levenshteinSim(x, pattern)) %>%
summarise(match = similarity[which.max(similarity)],
matched_to = pattern[which.max(match)])
此方法适用于小型数据集。直观地说,我总是面对彼此的所有元素。然而,得到的矩阵具有 numberofrows x numerofrows 的维度,在我的情况下是百万分之一百倍 - 太重而无法处理。
我还介绍了其他功能:adist
,pmatch
,agrep(l)
。同样的逻辑适用。我认为问题在这里是概念性的。有什么想法吗?