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.