Seite 1 von 1

Stringdist - amatch im Substring

Verfasst: So Okt 08, 2017 9:13 pm
von FSchmidt
Hallo,

ich versuche zurzeit zwei Datensätze zu vereinen, die leider keinen genauen gemeinsamen Key haben. Daher probere ich anhand der amatch Funktion aus dem 'stringdist' Packet string Variablen einander zuzuordnen.

Mit der normalen Matching Methode bin ich schon recht weit gekommen:

Code: Alles auswählen

library(stringdist)
AA$match<- amatch(tolower(AA$Titel_AA),tolower(AB$Titel_AB), maxDist=2)
Allerdings haben die Titel im 'AB' Dataframe teilweise weitere Informationen im Namen, die im 'AA' Dataframe nicht auftauchen. Daher würde ich gerne nur den substring des 'AB' dataframes durchsuchen, der solang wie die Variable im 'AA' Dataframe ist. Ich habe das mit den Funktionen 'substr' und 'nchar' so probiert:

Code: Alles auswählen

AA$bmatch <- amatch(tolower(AA$Titel_AA),tolower(substr(AB$Titel_AB,1,nchar(as.character(AA$Titel_AA)))), maxDist=2)
Allerdings bekomme ich dadurch nicht nur nicht die matches mit den Titeln, die extra Informationen im Namen haben, ich finde insgesamt weniger matches als vorher. Habe ich eine der Funktionen falsch verstanden oder angewandt?

Vielen Dank für die Hilfe!

ps: Falls jemand noch Vorschläge für eine besser Methode des matchings hat, wäre ich auch sehr neugierig ;-)

Re: Stringdist - amatch im Substring

Verfasst: So Okt 08, 2017 9:55 pm
von consuli
Zum matchen (joinen) von unperfekten Daten hat sich in der Versicherungsbranche (wo unperfekte Daten regelmäßig vorkommen) folgendes bewährt.

1. In beiden Dateien ein primäres Schlüsselfeld generieren.
2. Dranjoinen was matched.
3. In beiden Dateien ein sekundäres Schlüsselfeld generieren.
4. Rest dranjoinen was matched.
5. GOTO 3.

Consuli

Re: Stringdist - amatch im Substring

Verfasst: Mo Okt 09, 2017 12:04 pm
von EDi
Allerdings haben die Titel im 'AB' Dataframe teilweise weitere Informationen im Namen, die im 'AA' Dataframe nicht auftauchen.
Ich würde mit ein bisschen regex die "weiteren Informationen" rauslöschen...


Dann gibts auch noch das fuzzyjoin package:

https://github.com/dgrtwo/fuzzyjoin

(regex_inner_join() hört sich passend dafür an.

Bitte ein reproduzierbares Beispiel liefern, sonst kann/will ich nicht konkreter werden.