2017-01-25 6 views
0

Ich versuche, zwei verschiedene Datenrahmen basierend auf Firmennamen mit der agrep-Funktion unscharf zu finden. Um meinen Abgleich zu verbessern, möchte ich nur Unternehmen zuordnen, die sich im selben Land befinden.Unscharfe Übereinstimmung nach Kategorie

df1:        df2: 
Company    ISO  Company    ISO 
Aalberts Industries NL   Aalberts    NL 
Allison    NL   Allison transmission NL 
Allison    UK   Allison transmission UK 

Ich verwende die folgende Funktion zum Spiel:

testb$test <- "" 
for(i in 1:dim(testb)[1]) {x2 <- agrep(testb$name[i], testa$name, ignore.case=TRUE, value=TRUE, max.distance = Inf, useBytes = TRUE, fixed = TRUE) 
        x2 <- paste0(x2,"") 
        testb$test2[i] <- x2 
} 

ich eine Teilmenge für jedes Land erstellen und als jede Teilmenge entsprechen, die funktionieren, ist aber zeitaufwendig. Gibt es eine andere Möglichkeit, R nur mit Firmennamen übereinstimmen zu lassen, wenn df1 $ ISO = df2 $ ISO? Vielen Dank!

Antwort

1

Probieren Sie die Indizierung mit dem data.table Paket: https://www.r-bloggers.com/intro-to-the-data-table-package/.

Ihre Firmenspalten scheinen zu unterschiedlich zu sein, um konsistent und genau mit agrep() übereinzustimmen. Zum Beispiel passt "Aalberts Industries" nur dann "Aalberts" an, wenn Sie max.distance auf einen Wert größer als 10 setzen. Die gleiche Zeichenfolge Entfernung würde auch eine Übereinstimmung zwischen "Algebra" und "Alleyway" - nicht sehr nahe überhaupt. Ich empfehle Ihnen, die unnötigen Wörter in Ihren Unternehmensspalten vor dem Abgleich zu entfernen.

Sorry, ich würde dies zu einem Kommentar machen, aber ich habe nicht den erforderlichen Ruf. Vielleicht könnte jemand das zu einem Kommentar für mich konvertieren?