在R中,创建一个算法来纠正键入错误
我想创建一个能够纠正一些键入错误的算法。在我的例子中,我有一个带有以下变量的数据帧,例如:在R中,创建一个算法来纠正键入错误,r,R,我想创建一个能够纠正一些键入错误的算法。在我的例子中,我有一个带有以下变量的数据帧,例如: data id_number name ***123*** Maria dos Santos Magalhães ***123** Maria Santos Magalhães ***329** Lucas Barbosa ***329** Danilo Carvalho ***732** Paulo Silva da Fonseca ***732**
data
id_number name
***123*** Maria dos Santos Magalhães
***123** Maria Santos Magalhães
***329** Lucas Barbosa
***329** Danilo Carvalho
***732** Paulo Silva da Fonseca
***732** Wagner Silva Junior
***732** Paulo Silva Fonseca
解释firts变量:id_编号是每个公民的标识,但不会显示在内部。来源仅提供中间数字
我想构造一个概率算法,能够指出或者说两个具有相同中间id_号码的公民是相同还是不同的公民
例如,在732群体中,Maria dos Santos Magalhães和Maria Santos Magalhães很可能是同一公民。在*329组中,两位公民的概率很高,是不同的
第三组更有趣,保罗·席尔瓦·达·丰塞卡和瓦格纳·席尔瓦·朱尼尔不是同一个公民,但保罗·席尔瓦·达·丰塞卡和保罗·席尔瓦·丰塞卡很可能是同一个公民
一些想法?这里有一个使用
adist
和dplyr
包的解决方案。为了示例,我稍微更改了data.frame,添加了一个de Fonseca
首先,我们重新创建您的数据:
data <- read.table(text="
id_number;name
123;Maria dos Santos Magalhães
123;Maria Santos Magalhães
329;Lucas Barbosa
329;Danilo Carvalho
732;Paulo Silva de Fonseca
732;Paulo Silva da Fonseca
732;Wagner Silva Junior
732;Paulo Silva Fonseca", h=T, sep=";")
这是一个使用它的管道:我们首先通过分组
id\u编号
,在每个组上应用我们的可能重复的
函数,其结果用于切片
-ing
data %>%
group_by(id_number) %>%
slice(possible_duplicates(name)) %>%
ungroup()
Source: local data frame [5 x 2]
id_number name
(int) (fctr)
1 123 Maria dos Santos Magalhães
2 329 Lucas Barbosa
3 329 Danilo Carvalho
4 732 Paulo Silva de Fonseca
5 732 Wagner Silva Junior
如果需要更严格的阈值(默认为5),可以:
data %>%
group_by(id_number) %>%
slice(possible_duplicates(name, 2)) %>%
ungroup()
Source: local data frame [7 x 2]
id_number name
(int) (fctr)
1 123 Maria dos Santos Magalhães
2 123 Maria Santos Magalhães
3 329 Lucas Barbosa
4 329 Danilo Carvalho
5 732 Paulo Silva de Fonseca
6 732 Wagner Silva Junior
7 732 Paulo Silva Fonseca
这就是你想要的吗?虽然没有直接的联系,但会对单词进行模糊匹配。我还没有用过它,但计划很快就用它。经过一些调整,它可能会有用,也许更合适的做法是直接用它。也就是说,按
id\u number
-中间数字分组,比较所有名称,并假设那些在阈值下(由您通过实验确定)的名称足够相似。甚至在基本RNo中为adist
。我不明白这个案子:如果
data %>%
group_by(id_number) %>%
slice(possible_duplicates(name, 2)) %>%
ungroup()
Source: local data frame [7 x 2]
id_number name
(int) (fctr)
1 123 Maria dos Santos Magalhães
2 123 Maria Santos Magalhães
3 329 Lucas Barbosa
4 329 Danilo Carvalho
5 732 Paulo Silva de Fonseca
6 732 Wagner Silva Junior
7 732 Paulo Silva Fonseca