DESCRIPCIÓNla fusión de dos tramas de datos utilizando la coincidencia de cadenas Fuzzy/aproximado en R
Tengo dos conjuntos de datos con la información que necesito para fusionarse. Los únicos campos comunes que tengo son cadenas que no coinciden perfectamente y un campo numérico que puede ser sustancialmente diferente
La única forma de explicar el problema es mostrarle los datos. Aquí está a.csv y b.csv. Estoy intentando combinar B con A.
Hay tres campos en B y cuatro en A. Nombre de la empresa (archivo A solamente), Nombre del fondo, Clase de activos y Activos. Hasta ahora, mi atención se ha centrado en tratar de coincidir con los nombres de fondos mediante la sustitución de palabras o partes de las cuerdas para crear coincidencias exactas y luego usando:
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")
Sin embargo, esto sólo me lleva a alrededor de 30% a juego. El resto lo tengo que hacer a mano.
Los activos son un campo numérico que no siempre es correcto en cualquiera de los dos y puede variar mucho si el fondo tiene pocos activos. Asset Class es un campo de cadena que "generalmente" es el mismo en ambos archivos, sin embargo, hay discrepancias.
Agregando a la complicación son las diferentes series de fondos, en el archivo B. Por ejemplo:
AGF Valor canadiense
AGF canadiense Valor-D
En estos casos, Tengo que elegir el que no está escrito, o elegir el que se llama "A", "-A", o "Asesor" como el partido.
PREGUNTA
Cuál diría usted que es el mejor enfoque? Este ejercicio es algo que tengo que hacer mensualmente y emparejarlos manualmente es increíblemente lento. Los ejemplos de código serían instrumentales.
FIN DE
Un método que creo que puede funcionar es la normalización de las cuerdas sobre la base de la primera letra en mayúscula de cada palabra de la cadena. Pero no he podido averiguar cómo sacar eso usando R.
Otro método que consideré fue la creación de un índice de coincidencias basado en una combinación de activos, nombre de fondo, clase de activos y compañía. Pero, de nuevo, no estoy seguro de cómo hacer esto con R. O, para el caso, si es posible.
¡Los ejemplos de código, comentarios, pensamientos y dirección son muy apreciados!
Si hablamos de coincidencia de cadenas, entonces '? Agrep' (en el paquete básico). – Marek
Sería genial si puede hacer que los datos sean parte de la publicación para que podamos usar el ejemplo algunos años después de la publicación. Gracias. – Jochem
de hecho algunos años más tarde y los datos no están allí –