regex - funcion - extraer una subcadena en R de acuerdo con un patrón
select string r (4)
Aquí hay algunas maneras:
1) sub
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) read.table
read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"
4) subcadena
Esto supone que la segunda parte siempre comienza en el cuarto carácter (que es el caso en el ejemplo de la pregunta):
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) subcadena / expresión regular
Si los dos puntos no estuvieran siempre en una posición conocida, podríamos modificar (4) buscándolo:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc
devuelve la parte entre paréntesis:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
Este solo funciona si las subcadenas anteriores al colon son únicas (que están en el ejemplo de la pregunta). También requiere que el separador sea dos puntos (que está en la pregunta). Si se utilizara un separador diferente, podríamos usar sub
para reemplazarlo primero con dos puntos. Por ejemplo, si el separador fuera _
entonces string <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
ADICIONAL. soluciones strapplyc
y read.dcf
.
NOTA.
La string
entrada se supone que es:
string <- c("G1:E001", "G2:E002", "G3:E003")
Supongamos que tengo una lista de cadenas: string = c("G1:E001", "G2:E002", G3:E003)
. Ahora espero obtener un vector de cadena que contenga solo las partes después del punto ":", es decir, substring = c(E001,E002,E003)
. ¿Hay una manera conveniente en R para hacer esto? ¿Usando substr
? ¡Gracias!
Aquí hay otra respuesta simple
gsub("^.*:","", string)
Esto debería hacer:
gsub("[A-Z][1-9]:", "", string)
da
[1] "E001" "E002" "E003"
Por ejemplo, usando gsub
o sub
gsub(''.*:(.*)'',''//1'',string)
1] "E001" "E002" "E003"