DESCRIZIONEUnione di due dati frame utilizzando Fuzzy/approssimativa stringa corrispondente in R
ho due set di dati con le informazioni che ho bisogno di unire. Gli unici campi comuni che ho sono stringhe che non corrispondono perfettamente e un campo numerico che può essere sostanzialmente diverso
L'unico modo per spiegare il problema è mostrarti i dati. Ecco a.csv e b.csv. Sto cercando di unire B a A.
Ci sono tre campi in B e quattro in A. Nome società (solo file A), nome del fondo, classe di asset e attività. Finora, la mia attenzione si è concentrata sul tentativo di abbinare i nomi del Fondo con la sostituzione di parole o parti di stringhe per creare corrispondenze esatte e quindi utilizzando:
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")
Tuttavia, questo mi porta solo a circa il 30% di corrispondenza. Il resto devo fare a mano.
Le risorse sono un campo numerico che non è sempre corretto in entrambi e può variare in modo anomalo se il fondo ha scarse risorse. Asset Class è un campo stringa che è "generalmente" lo stesso in entrambi i file, tuttavia, vi sono discrepanze.
Aggiunta alla complicazione sono diverse serie di fondi, in File B. Per esempio:
AGF Canadian Valore
AGF Canadian Value-D
In questi casi, Devo scegliere quello che non è seried, o scegliere quello che è chiamato "A", "-A" o "Advisor" come la corrispondenza.
DOMANDA
Cosa diresti è l'approccio migliore? Questo esercizio è qualcosa che devo fare su base mensile e abbinarli manualmente è incredibilmente dispendioso in termini di tempo. Esempi di codice sarebbero strumentali.
IDEE
Un metodo che penso possa funzionare è normalizzare le corde in base alla prima lettera maiuscola di ogni parola nella stringa. Ma non sono stato in grado di capire come farlo usando R.
Un altro metodo che ho preso in considerazione è stato la creazione di un indice di corrispondenze basato su una combinazione di risorse, nome del fondo, classe di attivi e società. Ma di nuovo, non sono sicuro di come farlo con R. O, se è per quello, se è possibile.
Esempi di codice, commenti, pensieri e direzione sono molto apprezzati!
Se parliamo di corrispondenza delle stringhe, allora '? Agrep' (nel pacchetto base). – Marek
Sarebbe bello se fosse possibile rendere i dati parte del post in modo da poter utilizzare l'esempio pochi anni dopo la pubblicazione. Grazie. – Jochem
in effetti qualche anno dopo e i dati non ci sono –