這裏是一個融合了到目前爲止(提供的兩個部分的方法和克服了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有這樣仍然色曲rownames根本編號(因爲它們是默認情況下)。然後MERGE語句應該是:
merge(DataFrame1, DataFrame2, by.x="row.names", by.y="agnum")
- 大衛。
對不起 - 我錯過了有關逆序排序的問題,您必須編寫一個自定義函數來將所有大寫文本移動到名稱的開頭,並將其小寫。 – Joel 2010-08-28 08:46:52
謝謝喬爾,你有一個如何寫這樣的功能的想法? – 2010-08-28 08:54:36