【发布时间】:2017-08-31 22:26:58
【问题描述】:
我有一个包含姓名、姓氏、生日和一些随机变量的数据框。假设它看起来像这样:
BIRTH NAME SURNAME random_value
1 1 Luke Skywalker 1
2 1 Luke Skywalker 2
4 2 Leia Organa 3
5 3 Han Solo 7
7 1 Ben Solo 1
8 5 Lando Calrissian 3
9 3 Han Solo 4
10 3 Ham Solo 4
11 1 Luke Wkywalker 9
如何根据BIRTH、NAME和SURNAME判断姓名或姓氏是否有拼写错误,然后将拼写错误替换为正确的姓名或姓氏?
例如,我们看到有两个Han Solos 的生日是3,然后还有一个Ham Solo 的生日是相同的。我希望这个算法做的是找出Ham是错误的,并用Han替换它。
如果有两个不同的拼写出现相同的次数(对于相同的BIRTH),那么选择哪一个并不重要,只要该组的所有NAME或SURNAME是一样的(所以总是Ham或Han但不能混合为相同的BIRTH)。
所以最终的结果是这样的:
BIRTH NAME SURNAME random_value
1 1 Luke Skywalker 1
2 1 Luke Skywalker 2
4 2 Leia Organa 3
5 3 Han Solo 7
7 1 Ben Solo 1
8 5 Lando Calrissian 3
11 3 Han Solo 4
12 3 Han Solo 4
13 1 Luke Skywalker 9
有没有自动化的方法来做到这一点?我的数据集很大(>3mill 行),无法手动检查。
我想我们会寻找所有具有相同出生的名字和姓氏,然后检查是否有一些仅由一个字母不同的奇异异常值或者字母的顺序被交换(Lukevs@ 987654338@)。当我们发现这样的异常值时,我们会替换它。
【问题讨论】:
-
如果你这样总结
require(data.table); setDT(df1); df1[, .N, keyby =.(BIRTH, NAME, SURNAME)]你最终得到多少条记录,最大的N值是多少? -
我最终得到的行数略少于 700.000 行。最大的 N 值为 24。
标签: r dataframe data-cleaning