Вот полное решение, которое сочетает в себе два частичных метода, предложенных к настоящему моменту (и преодолевает опасения, высказанные 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
Третий шаг не был бы необходим, если бы DatFrame1 имел имена строк, которые все еще были последовательно пронумерованы (как они будут по умолчанию).Тогда оператор слияния будет:
merge(DataFrame1, DataFrame2, by.x="row.names", by.y="agnum")
- Дэвид.