我有一个庞大的数据集,类似于下面发布的列
NameofEmployee <- c(x, y, z, a)
Region <- c("Pune", "Orissa", "Orisa", "Poone")
如您所见,在Region
列中,“ Pune”区域的拼写形式有两种,即“ Pune”和“ Poona”。
类似地,“奥里萨邦”被拼写为“奥里萨邦”和“奥里萨邦”。
我有多个区域,它们实际上是相同的,但拼写方式不同。当我分析数据时,这会引起问题。
我希望能够借助R自动获得这些不匹配拼写的列表。
我也想自动将拼写替换为正确的拼写。
答案 0 :(得分:10)
我相信您应该使用语音代码来确定哪些拼写与哪些拼写最接近。
一个不错的选择是soundex算法,该算法在多个R包中实现。我将使用软件包stringdist
。
library(stringdist)
Region <- c("Pune", "Orissa", "Orisa", "Poone")
phonetic(Region)
#[1] "P500" "O620" "O620" "P500"
如您所见,Region[1]
和Region[4]
具有相同的soundex代码。 Region[2]
和Region[3]
也是如此。
答案 1 :(得分:9)
拼写错误很难检测,使用名称时会发生更多事件。
我建议使用一些字符串距离来检测两个单词的接近程度。您可以使用tidystringdist轻松地做到这一点,它允许从向量中获取所有组合,然后执行所有available string distance methods from stringdist:
Region <- c("Pune", "Orissa", "Orisa", "Poone")
library(tidystringdist)
library(magrittr)
tidy_comb_all(Region) %>%
tidy_stringdist()
#> # A tibble: 6 x 12
#> V1 V2 osa lv dl hamming lcs qgram cosine jaccard jw
#> * <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Pune Oris… 6 6 6 Inf 10 10 1 1 1
#> 2 Pune Orisa 5 5 5 Inf 9 9 1 1 1
#> 3 Pune Poone 2 2 2 Inf 3 3 0.433 0.4 0.217
#> 4 Orissa Orisa 1 1 1 Inf 1 1 0.0513 0 0.0556
#> 5 Orissa Poone 6 6 6 Inf 11 11 1 1 1
#> 6 Orisa Poone 5 5 5 5 10 10 1 1 1
#> # ... with 1 more variable: soundex <dbl>
由reprex package(v0.2.0)于2018-07-24创建。
正如您在此处看到的那样,Pune和Poone的osa,lv和dl距离为2,而Orisa / Orissa的距离为1,表明它们的拼写非常接近。
一旦识别出这些,就可以进行替换。