Stringdist - amatch im Substring

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
FSchmidt

Stringdist - amatch im Substring

Beitrag 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 ;-)
consuli
Beiträge: 479
Registriert: Mo Okt 10, 2016 8:18 pm

Re: Stringdist - amatch im Substring

Beitrag 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
Irmgard.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Stringdist - amatch im Substring

Beitrag 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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten