es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extraer filas de un marco de datos en R basado en una coincidencia difusa de cadenas.

Mi cadena de texto es “Escherichia coli str Nissle 1917” y quiero extraer de un df todas las filas que contengan una cadena similar en una columna específica (columna de nombre del organismo), el resultado debería ser el siguiente:

  # assembly_accession  bioproject    biosample     wgs_master refseq_category
1:      GCF_000333215.1 PRJNA224116 SAMEA2272139 CAPM00000000.1              na
2:      GCF_000714595.1 PRJNA224116 SAMN02794012                             na
3:      GCF_003546975.1 PRJNA224116 SAMN07451663                             na
4:      GCF_019967895.1 PRJNA224116 SAMN18749717                             na
    taxid species_taxid                organism_name infraspecific_name isolate
1: 316435           562 Escherichia coli Nissle 1917 strain=Nissle 1917
2: 316435           562 Escherichia coli Nissle 1917 strain=Nissle 1917
3: 316435           562 Escherichia coli Nissle 1917 strain=Nissle 1917
4: 316435           562 Escherichia coli Nissle 1917 strain=Nissle 1917

He intentado con agrep pero no funciona debido a la palabra “str”.

¿Hay alguna forma de hacer una coincidencia aproximada o algo similar para extraer estas filas de mi dataframe según mi cadena de entrada?

Muchas gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, se puede utilizar expresiones regulares para realizar una coincidencia difusa y extraer filas de su dataframe. Aquí tienes un ejemplo de código que puedes utilizar:

    # crear dataframe de ejemplo
    df <- data.frame(organism_name = c("Escherichia coli str Nissle 1917", "Escherichia coli 010101", "Bacillus subtillis"))
    
    # especificar la cadena que deseas buscar
    match_string <- "Escherichia coli str Nissle 1917"
    
    # utilizar expresiones regulares para realizar una coincidencia difusa y extraer filas
    matches <- grepl(match_string, df$organism_name, ignore.case = TRUE)
    
    # filtrar el dataframe para incluir solo las filas que coinciden
    matched_df <- df[matches, ]
    

    En este ejemplo, creamos un dataframe simple con una columna “organism_name” que contiene diferentes cadenas. Luego, especificamos la variable “match_string” como la cadena que deseas buscar y utilizamos grepl() para verificar si cada fila en la columna “organism_name” contiene una coincidencia para la “match_string”. Establecemos ignore.case = TRUE para ignorar la distinción entre mayúsculas y minúsculas. El resultado es un vector lógico “matches” que indica qué filas coinciden con la cadena.

    Finalmente, utilizamos el vector “matches” para filtrar el dataframe original (“df”) y crear un nuevo dataframe “matched_df” que incluye solo las filas que coinciden con la cadena.

Comments are closed.