这里提供了一个完整的解决方案,结合了目前为止所提供的两种部分方法(并克服了Spacedman关于“将Grassle与Graßle匹配”的担忧)。
DataFrame2$revname <- gsub("([^\\s]*)\\s(.*)","\\2 \\1",DataFrame2$Name,perl=TRUE)
DataFrame2$agnum <-sapply(tolower(DataFrame2$revname), agrep, tolower(DataFrame1$Name) )
DataFrame1$num <-1:nrow(DataFrame1)
merge(DataFrame1, DataFrame2, by.x="num", by.y="agnum")
输出:
num Name.x Name.y revname
1 1 Van Brempt Kathleen Kathleen VAN BREMPT VAN BREMPT Kathleen
2 2 Gräßle Ingeborg Ingeborg GRÄSSLE GRÄSSLE Ingeborg
3 3 Gauzès Jean-Paul Jean-Paul GAUZÈS GAUZÈS Jean-Paul
4 4 Winkler Iuliu Iuliu WINKLER WINKLER Iuliu
如果DataFrame1的行名称仍然按顺序编号(默认情况下会这样),则第三步是不必要的。合并语句将如下所示:
merge(DataFrame1, DataFrame2, by.x="row.names", by.y="agnum")
-- 大卫。