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.

Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. Reemplaza múltiples palabras en múltiples frases.

Quiero reemplazar palabras en un vector basado en palabras originales y de reemplazo en otro dataframe. Como ejemplo:

Un vector de cadenas que se modificarán:

my_words <- c(“example r”, “example River”, “example R”, “anthoer river”,
“now a creek”, “and another Ck”, “example river tributary”)

Un dataframe de palabras a reemplazar y las palabras de reemplazo correspondientes:

my_replace <- data.frame(
original = c(“r”, “River”, “R”, “river”, “Ck”, “creek”, “Creek”),
replacement = c(“R”, “R”, “R”, ‘R’, “C”, “C”, “C”))

Quiero reemplazar cualquier aparición de una de las palabras en my_replace$original con el valor correspondiente en my_replace$replacement en el vector my_words. Intenté usar stringr::str_replace_all(), pero reemplazó todas las instancias de la letra/palabra, en lugar de palabras completas (por ejemplo, “another” se convirtió en “anotheR”), lo cual no es deseable.

Pseudo código de lo que quiero hacer:

str_replace_all(my_words, my_replace$original, my_replace$replacement)

Resultado deseado:

“example R”, “example R”, “example R”, “another R”, “now a C”, “and another C”, “example R tributary”

Encontré una solución usando un bucle for, pero dado que mi conjunto de datos es grande, la opción del bucle for es demasiado lenta. Cualquier consejo será muy apreciado.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para reemplazar solo palabras completas, puedes usar expresiones regulares con límites de palabra \b en la función gsub() de base R:

    gsub(paste0("\\b(", paste(my_replace$original, collapse="|"), ")\\b"),
         my_replace$replacement, my_words)
    

    Este código reemplazará cualquier aparición de una de las palabras en my_replace$original con el valor correspondiente en my_replace$replacement en el vector my_words. La función paste0 construye un patrón de expresión regular que coincide con cualquiera de las palabras en my_replace$original rodeadas de límites de palabra \b.

    El vector resultante será:

    [1] "ejemplo R"              "ejemplo R"              
    [3] "ejemplo R"              "otro R"                 
    [5] "ahora un C"              "y otro C"               
    [7] "ejemplo R tributario"
    

Comments are closed.