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 dígitos y el siguiente string de un vector de caracteres en R.

Estoy intentando resolver un problema. Tengo un vector de texto y me gustaría extraer los números de él y el siguiente carácter (incluyendo el espacio). Estoy usando el paquete stringr para R, pero no puedo encontrar una solución adecuada para mi problema. Agradecería su ayuda/comentarios.

library(tidyverse)
library(stringr)
my_text <- "Este es mi vector de ejemplo. Tengo 15 naranjas en el refrigerador, 12 manzanas en la habitación, 1 madre en mi familia, 1 padre en mi familia, 12 hermanos que viven en 3 continentes, y 45 cosasaleatoriasenmicasa que no uso"

Me gustaría obtener la siguiente información de mi_text

“15 naranjas” “12 manzanas” “1 madre” “1 padre” “12 hermanos” “45 cosasaleatoriasenmicasa”

He intentado usar str_extract_all(my_text, "\\\d+") pero obviamente eso solo captura los dígitos.

str_extract_all(my_text, "\d+")

“15” “12” “1” “1” “12” “45”

He intentado usar diferentes patrones de regex en la página de ayuda del paquete stringr (https://stringr.tidyverse.org/articles/regular-expressions.html) pero no puedo encontrar uno que funcione para mi problema. Además, el texto después de los números puede ser aleatorio: en lugar de manzanas y naranjas puedo tener pollos, casas, etc. ¿Alguna sugerencia sobre cómo debería abordar este problema?

Muchas gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución es utilizar la función str_extract con un patrón de expresión regular que coincida con uno o más dígitos (\\d+) seguidos de uno o más espacios (\\s+) y uno o más caracteres que no sean dígitos o espacios en blanco (\\S+). Este patrón coincidirá con los números y el siguiente carácter (incluido el espacio) después de él.

    “`{r}
    results <- str_extract_all(my_text, “\d+\s+\S+”)
    results


    Esto dará como resultado la salida deseada: ```{r} [1] "15 oranges" "12 apples" "1 mother" [4] "1 father" "12 siblings" "45 randomthingsinmyhouse that"

    Si desea eliminar el “that” al final del último resultado, puede utilizar str_replace para reemplazarlo con una cadena vacía:

    “`{r}
    results[length(results)] <- str_replace(results[length(results)], ” that”, “”)
    results


    Esto dará como resultado: ```{r} [1] "15 oranges" "12 apples" "1 mother" [4] "1 father" "12 siblings" "45 randomthingsinmyhouse"

    ¡Espero que esto sea de ayuda!

Comments are closed.