Aquí hay algunas maneras:
1) sub
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) leer.tabla
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 4 ° 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 el colon no estuviera siempre en una posición conocida, podríamos modificar (4) buscándolo:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc
devuelve la porción entre paréntesis:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) leer.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 usara un separador diferente, entonces podríamos usarlo sub
para reemplazarlo con dos puntos primero. Por ejemplo, si el separador fuera _
entoncesstring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) separado
7a) Utilizando tidyr::separate
creamos un marco de datos con dos columnas, una para la parte anterior a los dos puntos y otra para después, y luego extraemos la última.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b) Alternativamente separate
se puede utilizar para simplemente crear la post
columna y, a continuación unlist
y unname
la trama de datos resultante:
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) recortes Podemos usar trimws
para recortar caracteres de palabras de la izquierda y luego usarlo nuevamente para recortar los dos puntos.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Nota
Se string
supone que la entrada es:
string <- c("G1:E001", "G2:E002", "G3:E003")
_
como separador e hice dos variables separadas para el prefijo y el sufijo según la respuesta de @Grothendieck:prefix <- sub("_.*", "", variable)
ysuffix <- sub(".*_", "", variable)
Por ejemplo usando
gsub
osub
fuente
Aquí hay otra respuesta simple
fuente
Tarde a la fiesta, pero para la posteridad, el paquete stringr (parte del popular conjunto de paquetes "tidyverse") ahora proporciona funciones con firmas armonizadas para el manejo de cadenas:
fuente
Esto debería hacer:
da
fuente
Si está utilizando,
data.table
entonceststrsplit()
es una opción natural:fuente
El paquete de unglue proporciona una alternativa, no se requiere conocimiento sobre expresiones regulares para casos simples, aquí lo haríamos:
Creado el 06/11/2019 por el paquete reprex (v0.3.0)
Más información: https://github.com/moodymudskipper/unglue/blob/master/README.md
fuente