Foro de debate

Búsqueda de palabras clave en un dataframe

Búsqueda de palabras clave en un dataframe

de Igor Gutiérrez -
Número de respuestas: 2
Buenas:

Tengo un dataframe con columnas de caracteres y quiero que R me detecte las filas en las que aparecen combinaciones de palabras clave que yo defino. Por ejemplo, tengo el siguiente dataframe (llamado MANT):

COMPONENTE
SUBCOMPONENTE
ACCIÓN
Cjto. de mordazas
Mordaza sup. izda.
Apretar
Cjto. de bandas

Cortar banda rota
Cjto. de mordazas

Eliminar fuga
Cjto. de mordazas Mordaza inf. dcha.
Montar manguera nueva


Quiero que R me detecte las filas en las que aprecen juntas las palabras "mord" (mordazas) y "apret" (apretar) o bien "mord" y "fuga".

He probado con la función grep() pero el problema es que sólo me deja introducir un string de caracteres para buscar y un sólo vector (una sola columna) donde buscar. Un ejemplo de esto:

>grep("mord", MANT$COMPONENTE, ignore.case=TRUE)

En este caso R me daría como output el índice de las filas 1,3 y 4.

Lo que quisiera sería buscar en más de una columna y con más de una palabra. De lo contrario me tocaría ir de uno en uno y luego hacer uniones e intersecciones de casos.

Si alguien me puede ayudar le estaría muy agradecido

Igor
En respuesta a Igor Gutiérrez

Re: Búsqueda de palabras clave en un dataframe

de valero andreu matillas -
yo lo que haria seria crear un nuevo dataframe a partir del anterior, con la siguiente estructura:

(nombre dataframe nueva)=(nombre dataframe antigua)[(nombre dataframe antigua)$(Variable que se quiera seleccionar de la datframe antigua)==(parametro que se necesite)*, ]

En respuesta a Igor Gutiérrez

Re: Búsqueda de palabras clave en un dataframe

de Andrés Necochea -
No sé exactamente qué es lo que buscas pero yo en tu lugar usaría grepl.


Para buscar "mord" en la primera columna:
grep("mord", MANT$COMPONENTE, ignore.case=TRUE)
devuelve: TRUE FALSE TRUE TRUE

Luego para buscar "apret" en la tercera:
grep("apret", MANT$ACCION, ignore.case=TRUE)
devuelve: TRUE FALSE FALSE FALSE

y para buscar la conjunción de ambos, usando el operador &:
grep("mord", MANT$COMPONENTE, ignore.case=TRUE) & grep("apret", MANT$ACCION, ignore.case=TRUE)
devuelve: TRUE FALSE FALSE FALSE

Luego puedes usar esta expresión para filtrar el data frame:
filtro <- grep("mord", MANT$COMPONENTE, ignore.case=TRUE) & grep("apret", MANT$ACCION, ignore.case=TRUE)
MANT[filtro,]

Ojo: No olvidar la coma (,) dentro de los corchetes al aplicar el filtro.