Wie kann ich mit fuzzy-match-strings aus zwei datasets?

Habe ich gearbeitet, auf eine Weise zu verbinden zwei Datensätze basiert auf einem unvollkommenen string, wie ein name einer Firma. In der Vergangenheit musste ich mit zwei sehr schmutzig Listen, eine Liste hatte, Namen und finanziellen Informationen, die andere Liste hatte Namen und Adresse. Weder hatte eindeutige IDs, die entsprechend auf! DAVON AUSGEHEN, DASS DIE REINIGUNG BEREITS ANGEWENDET WURDE UND ES VIELLEICHT TIPPFEHLER UND EINFÜGUNGEN.

Bisher AGREP ist das nächste tool, das ich gefunden habe, die funktionieren könnte. Ich kann verwenden Sie die levenshtein-Distanzen in den AGREP-Paket, das Messen der Anzahl von Deletionen, Insertionen und Substitutionen zwischen zwei Zeichenketten. AGREP zurückkehren wird der string mit dem kleinsten Abstand (den meisten ähnlich).

Aber ich habe schon Schwierigkeiten haben, drehen Sie diesen Befehl auf einen einzelnen Wert anwenden, um einen ganzen Daten-frame. Ich habe grob verwendet eine for-Schleife zu wiederholen, AGREP-Funktion, aber es muss einen einfacheren Weg.

Finden Sie den folgenden code:

a<-data.frame(name=c('Ace Co','Bayes', 'asd', 'Bcy', 'Baes', 'Bays'),price=c(10,13,2,1,15,1))
b<-data.frame(name=c('Ace Co.','Bayes Inc.','asdf'),qty=c(9,99,10))

for (i in 1:6){
    a$x[i] = agrep(a$name[i], b$name, value = TRUE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
    a$Y[i] = agrep(a$name[i], b$name, value = FALSE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
}
  • Basierend auf alle feedback und einige stochern von mir, ich habe eine Funktion, die lösen mein problem genauer. Code kann hier gefunden werden: github.com/Adamishere/Fuzzymatching/blob/master/...
  • danke, dass Sie diese Funktion. Dies ist ganz nützlich. Jedoch bin ich nicht in der Lage, meine Spalte in string1, string2 und id2. Meine Daten werden in Daten.Tabelle also nicht sicher, wie soll ich Ihnen übergeben, wenn Sie die Funktion aufrufen. Könnten Sie bitte vorschlagen. Sorry, wenn meine Frage sehr basic, ich habe angefangen zu lernen, dass R und noch einen langen Weg zu gehen
  • Ich würde nur die Daten verwenden.Rahmen(), dann einmal das Spiel fertig ist, konvertieren Sie die Daten.Tabelle()
  • die fuzzyjoin-Paket könnte helfen - siehe Antwort unten mit fuzzyjoin::stringdist_left_join
InformationsquelleAutor A L | 2014-10-16
Schreibe einen Kommentar