Supongamos que tengo dos columnas de nombres. Todos los nombres en la primera columna están en la segunda columna, pero en orden aleatorio, Y algunos de ellos no son coincidencias perfectas. Así que tal vez en una columna hay el nombre de John Smith y en el segundo John_smith o JonSmith. ¿Hay alguna manera R bastante simple de realizar un "mejor partido"?Coincidencia de cadena imperfecta
Respuesta
dado algunos datos de la siguiente manera:
df<-data.frame(x=c('john doe','john smith','sally struthers'),y=c('John Smith','John_smith','JonSmith'))
, usted puede obtener un largo camino con unos gsub
s y tolower
:
df$y.fix <- gsub('[[:punct:]]', ' ', df$y)
df$y.fix <- gsub(' ', '', df$y.fix)
df$y.fix <- tolower(df$y.fix)
df$x.fix <- tolower(gsub(' ', '', df$x))
Entonces agrep
es lo que usted quiere:
> agrep(df$x.fix[2], df$y.fix)
[1] 1 2 3
para cadenas confusas más complejas, consulte this post from last week.
Estabas un poco adelantado a mí. –
Joris, la caballerosidad no está muerta. –
+1 para 'tolower()' y 'gsub()' out cosas que de otro modo estarían sobrecontables en distancias levenshtein. –
- 1. Coincidencia de cadena de Python
- 2. Cadena coincidencia exacta
- 3. C# coincidencia de cadena múltiple
- 4. Coincidencia máxima para la Cadena
- 5. Problema de coincidencia de patrón de cadena
- 6. Porcentaje de coincidencia de coincidencia con Levenshtein Coincidencia de distancia
- 7. Encontrar la coincidencia de la cadena parcial
- 8. PHP cadena sustituir toda coincidencia de palabra
- 9. Cadena de coincidencia de RegExp no comenzando con
- 10. Número de coincidencia al final de la cadena
- 11. Coincidencia de patrones al comienzo de una cadena en f #
- 12. Secuencias de coincidencia de caracteres consecutivos en una cadena
- 13. Cómo subconjunto de datos con la coincidencia de cadena avanzada
- 14. Coincidencia de cadena de caracteres comodín en Ruby
- 15. jQuery coincidencia de texto
- 16. cómo regexar cadena de coincidencia escapada con estilo sql?
- 17. cadena de coincidencia que no contenga una palabra específica
- 18. coincidencia de patrones para la cadena que tiene "{"
- 19. Cómo implementar la coincidencia de cadena Unicode plegando en python
- 20. Coincidencia de una cadena con diferentes posibilidades usando grep
- 21. Win32 API para hacer coincidencia de cadena comodín
- 22. ¿Es posible hacer una coincidencia de cadena parcial en una clave de cadena de diccionario?
- 23. Coincidencia de patrón dinámico
- 24. Invertir coincidencia con regexp
- 25. Índice regex en una cadena coincidente donde falló la coincidencia
- 26. Uso de búsqueda de minimax para juegos de cartas con información imperfecta
- 27. Algoritmo de coincidencia de Dominios
- 28. algoritmo de coincidencia de árbol?
- 29. Coincidencia de RegEx entre caracteres
- 30. coincidencia de expresiones regulares de Java
Si tiene más columnas que solo el nombre y el apellido (por ejemplo, también tiene fecha de nacimiento y dirección, o lo que sea) y desea encontrar filas que coincidan, consulte el paquete 'RecordLinkage'. http://cran.r-project.org/web/packages/RecordLinkage/index.html –