我在长列表中的数千个名称的数据框中有一个列表。许多名称之间的差异很小,因此略有不同。我想找到一种匹配这些名称的方法。例如:
names <- c('jon smith','jon, smith','Jon Smith','jon smith et al','bob seger','bob, seger','bobby seger','bob seger jr.')
Run Code Online (Sandbox Code Playgroud)
我已经amatch在stringdist函数以及中进行了研究agrep,但是所有这些都需要一个主名称列表,用于与另一个名称列表进行匹配。就我而言,我没有这样的主列表,因此我想通过识别具有高度相似模式的姓名从数据中创建一个主列表,以便我可以查看它们并确定它们是否是同一个人(在很多情况下,的情况下)。我想要一个新列中的输出,可以帮助我知道这些是可能的匹配,也许是基于Levenshtein距离之类的某种相似性得分。也许是这样的:
names match SimilarityScore
1 jon smith a 9
2 jon, smith a 8
3 Jon Smith a 9
4 jon smith et al a 5
5 bob seger b 9
6 bob, seger b 8
7 bobby seger b 7
8 bob seger jr. b 5
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?
似乎在我的方差计算中na.rm=T的apply函数内:
poolvarcheck=((7037*(apply(yes, 2, var, na.rm=T)))+(5394*(apply(no,2,var,na.rm=T))))/12431
导致此警告消息:
"在 if (na.rm) "na.or.complete" else "everything" 中:条件长度 > 1 并且只使用第一个元素"
我环顾四周,这似乎主要适用于循环或 if 子句,但我想知道 1)这是否会影响我的结果以及如何影响,以及 2)是否有办法避免警告。