Powiedz, że mam dwie kolumny nazw. Wszystkie nazwy w pierwszej kolumnie znajdują się w drugiej kolumnie, ale w losowej kolejności, a niektóre z nich nie są idealnie dopasowane. Więc może w jednej kolumnie jest imię John Smith, a w drugim John_smith lub JonSmith. Czy istnieje dość prosty sposób na wykonanie "najlepszego meczu"?Niedoskonałe dopasowanie ciągów
Odpowiedz
Biorąc pod uwagę niektóre dane tak:
df<-data.frame(x=c('john doe','john smith','sally struthers'),y=c('John Smith','John_smith','JonSmith'))
można uzyskać długą drogę z kilkoma gsub
s oraz tolower
:
df$y.fix <- gsub('[[:punct:]]', ' ', df$y)
df$y.fix <- gsub(' ', '', df$y.fix)
df$y.fix <- tolower(df$y.fix)
df$x.fix <- tolower(gsub(' ', '', df$x))
Następnie agrep
co zechcesz:
> agrep(df$x.fix[2], df$y.fix)
[1] 1 2 3
dla bardziej złożonych, mylących ciągów, zobacz this post from last week.
Byłeś odrobinę przed sobą. –
Joris, rycerskość nie jest martwa. –
+1 dla 'tolower()' i 'gsub()' out rzeczy, które w przeciwnym razie byłyby zbyt wysokie w odległościach levenshtein. –
- 1. Szybkie częściowe dopasowanie ciągów w R
- 2. Jak wyszukiwać i zastępować dokładne dopasowanie ciągów tylko
- 3. C# dopasowanie wyrażenie do HHMMSS
- 4. Wildcard dopasowanie w Javie
- 5. Książki o algorytmach ciągów
- 6. DateTime.TryParseExact metoda porównania ciągów
- 7. Dopasowanie do wzorca nakładają się - Dopasowanie wzorca do operatorów
- 8. Dokładne dopasowanie ciągów w vim? (Tak jak w trybie "regex-off" w mniejszej ilości).
- 9. Znajdź "najlepsze dopasowanie" równanie
- 10. Dopasowanie/kalibracja stereo OpenCV
- 11. ElasticSearch, dopasowanie z filtrem?
- 12. Częściowe dopasowanie argumentu funkcji
- 13. prosty wielowymiarowy dopasowanie krzywej
- 14. Dopasowanie warunkowe tablicy Numpy
- 15. Regex, wybierz najbliższe dopasowanie
- 16. List.Any uzyskać dopasowanie Ciąg
- 17. Dopasowanie do łańcucha Regex?
- 18. Podsumowanie podciągów doładowania dopasowanie
- 19. jQuery dopasowanie wielu klas
- 20. Dopasowanie wzorca bash
- 21. Dopasowanie sigmoid do danych
- 22. Python regex dopasowanie data
- 23. OpenCV dopasowanie zdjęć
- 24. Dopasowanie tekstu JList
- 25. Dopasowanie krzywej z pytonem
- 26. Co to dopasowanie regex `/^.*$/`?
- 27. Ważone dopasowanie dwudzielne
- 28. Tablica ciągów ciągów znaków
- 29. Groovy sposób na dopasowanie wartości?
- 30. wyszukiwanie elastyczne dokładne dopasowanie frazowe
Jeśli masz więcej kolumn niż tylko imię i nazwisko (np. Masz datę urodzenia i adres też lub cokolwiek innego) i chcesz znaleźć wiersze, które mogą być zgodne, spójrz na pakiet 'RecordLinkage'. http://cran.r-project.org/web/packages/RecordLinkage/index.html –