extrair uma substring em R de acordo com um padrão

Suponha que eu tenha uma lista de string: string = c("G1:E001", "G2:E002", G3:E003) . Agora eu espero pegar um vetor de string que contenha apenas as partes depois dos dois pontos “:”, ou seja, substring = c(E001,E002,E003) . Existe uma maneira conveniente em R para fazer isso? Usando substr ? Obrigado!

Aqui estão algumas maneiras:

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) substring

Isso pressupõe que a segunda parte sempre começa no quarto caractere (que é o caso no exemplo da pergunta):

 substring(string, 4) ## [1] "E001" "E002" "E003" 

4a) substring / regex

Se o cólon não estivesse sempre em uma posição conhecida, poderíamos modificar (4) procurando por ele:

 substring(string, regexpr(":", string) + 1) 

5) strapplyc

strapplyc retorna a parte com parênteses:

 library(gsubfn) strapplyc(string, ":(.*)", simplify = TRUE) ## [1] "E001" "E002" "E003" 

6) read.dcf

Este só funciona se os substrings anteriores ao cólon forem únicos (o que eles estão no exemplo da questão). Também requer que o separador seja cólon (o que está na questão). Se um separador diferente fosse usado, poderíamos usar sub para substituí-lo por dois pontos primeiro. Por exemplo, se o separador for _ then string <- sub("_", ":", string)

 c(read.dcf(textConnection(string))) ## [1] "E001" "E002" "E003" 

ADICIONADO soluções strapplyc e read.dcf .

NOTA.

A string input é considerada como:

 string <- c("G1:E001", "G2:E002", "G3:E003") 

Por exemplo, usando gsub ou sub

  gsub('.*:(.*)','\\1',string) 1] "E001" "E002" "E003" 

Aqui está outra resposta simples

 gsub("^.*:","", string) 

Isso deve fazer:

 gsub("[AZ][1-9]:", "", string) 

 [1] "E001" "E002" "E003"