BESCHREIBUNGzwei Daten Merging Frames Fuzzy/Ungefähre String Matching in R
Ich habe zwei Datensätze mit Informationen verwenden, die ich zusammenführen müssen. Die einzigen gemeinsamen Felder, die ich habe, sind Strings, die nicht perfekt übereinstimmen und ein numerisches Feld, das sich wesentlich unterscheiden kann.
Die einzige Möglichkeit, das Problem zu erklären, ist, Ihnen die Daten zu zeigen. Hier ist a.csv und b.csv. Ich versuche, B mit A zu verschmelzen.
Es gibt drei Felder in B und vier in A. Firmenname (nur Datei A), Fondsname, Asset-Klasse und Assets. Bisher mein Fokus war auf dem Versuch, die Fondsnamen übereinstimmen durch Wörter oder Teile der Saiten ersetzen exakte Übereinstimmungen zu erstellen und dann mit:
a <- read.table(file = "http://bertelsen.ca/R/a.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T)
b <- read.table(file = "http://bertelsen.ca/R/b.csv",header=TRUE, sep=",", na.strings=F, strip.white=T, blank.lines.skip=F, stringsAsFactors=T)
merge(a,b, by="Fund.Name")
aber das bringt mich nur auf etwa 30% Matching. Den Rest muss ich von Hand machen.
Assets sind ein numerisches Feld, das in beiden nicht immer korrekt ist und stark variieren kann, wenn der Fonds über geringe Vermögenswerte verfügt. Die Asset-Klasse ist ein String-Feld, das in beiden Dateien "im Allgemeinen" identisch ist, jedoch gibt es Diskrepanzen.
auf die Komplikation Hinzufügen sind die verschiedenen Reihe von Fonds, in Datei B. Zum Beispiel:
AGF Canadian Wert
AGF kanadischen Wert D
In diesen Fällen Ich muss diejenige wählen, die nicht in der Reihe ist, oder wähle die, die "A", "-A" oder "Advisor" genannt wird, als die Übereinstimmung.
FRAGE
Was würden Sie sagen, ist der beste Ansatz? Diese Übung ist etwas, was ich monatlich machen muss, und die manuelle Anpassung ist unglaublich zeitaufwendig. Beispiele für Code wären instrumentell.
IDEAS
Eine Methode, die ich denke, arbeiten kann, ist die Saiten Normalisierung basierend auf dem ersten aktivierten Buchstaben jedes Wortes in der Zeichenkette. Aber ich war nicht in der Lage, herauszufinden, wie man das mit Hilfe von R abziehen kann. Eine andere Methode, die ich in Betracht gezogen habe, war das Erstellen eines Übereinstimmungsindex basierend auf einer Kombination aus Vermögenswerten, Fondsname, Anlageklasse und Unternehmen. Aber ich bin mir nicht sicher, wie ich das mit R machen soll. Oder, wenn es überhaupt möglich ist.
Beispiele für Code, Kommentare, Gedanken und Richtung werden sehr geschätzt!
Wenn wir über String-Matching dann '? Agrep' (im Basispaket) sprechen. – Marek
Wäre toll, wenn Sie die Daten Teil des Posts machen können, damit wir das Beispiel ein paar Jahre nach dem Posten verwenden können. Vielen Dank. – Jochem
tatsächlich ein paar Jahre später und die Daten sind nicht da –