varias superponer studio lineas graficos graficas r string text vector stringr

superponer - Extraer texto entre paréntesis en R



superponer graficas en r (2)

Dos preguntas relacionadas. Tengo vectores de datos de texto como

"a(b)jk(p)" "ipq" "e(ijkl)"

y desea separarlo fácilmente en un vector que contenga el texto FUERA del paréntesis:

"ajk" "ipq" "e"

y un vector que contiene el texto DENTRO de los paréntesis:

"bp" "" "ijkl"

¿Hay alguna manera fácil de hacer esto? Una dificultad añadida es que pueden ser bastante grandes y tener un número grande (ilimitado) de paréntesis. Por lo tanto, no puedo simplemente tomar el texto "pre / post" entre paréntesis y necesito una solución más inteligente.


La función rm_round en el paquete qdapRegex que mantengo nació para hacer esto:

Primero obtendremos y cargaremos el paquete a través de pacman

if (!require("pacman")) install.packages("pacman") pacman::p_load(qdapRegex)

## Entonces podemos usarlo para eliminar y extraer las partes que desee :

x <-c("a(b)jk(p)", "ipq", "e(ijkl)") rm_round(x) ## [1] "ajk" "ipq" "e" rm_round(x, extract=TRUE) ## [[1]] ## [1] "b" "p" ## ## [[2]] ## [1] NA ## ## [[3]] ## [1] "ijkl"

Para condensar b y p usa:

sapply(rm_round(x, extract=TRUE), paste, collapse="") ## [1] "bp" "NA" "ijkl"


Texto fuera del paréntesis

> x <- c("a(b)jk(p)" ,"ipq" , "e(ijkl)") > gsub("//([^()]*//)", "", x) [1] "ajk" "ipq" "e"

Texto dentro del paréntesis

> x <- c("a(b)jk(p)" ,"ipq" , "e(ijkl)") > gsub("(?<=//()[^()]*(?=//))(*SKIP)(*F)|.", "", x, perl=T) [1] "bp" "" "ijkl"

El (?<=//()[^()]*(?=//)) coincide con todos los caracteres que están dentro de los corchetes y luego lo siguiente (*SKIP)(*F) hace que la coincidencia falle. Ahora intenta ejecutar el patrón que fue justo después de | símbolo contra la cadena restante. Entonces el punto . coincide con todos los personajes que aún no se han omitido. Reemplazar todos los caracteres coincidentes con una cadena vacía dará solo el texto presente dentro de las raquetas.

> gsub("//(([^()]*)//)|.", "//1", x, perl=T) [1] "bp" "" "ijkl"

Esta expresión regular capturaría todos los caracteres que están presentes dentro de los corchetes y coincide con todos los demás caracteres. |. o una parte ayuda a hacer coincidir todos los caracteres restantes además de los capturados. Entonces, al reemplazar todos los caracteres con los caracteres presentes dentro del índice de grupo 1, obtendrá el resultado deseado.