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 comece no quarto caractere (que é o caso no exemplo da pergunta):
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) substring / regex
Se os dois pontos nem sempre estivessem em uma posição conhecida, poderíamos modificar (4) procurando por:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc
retorna a parte entre parênteses:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
Este funciona apenas se as substrings anteriores ao cólon forem únicas (que estão no exemplo da pergunta). Também requer que o separador seja dois pontos (o que está em questão). Se um separador diferente fosse usado, poderíamos sub
substituí-lo por dois pontos primeiro. Por exemplo, se o separador fosse _
entãostring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) separado
7a) Usando tidyr::separate
, criamos um quadro de dados com duas colunas, uma para a parte antes dos dois pontos e outra para depois, e depois extraímos a ú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) Como alternativa, separate
pode ser usado apenas para criar a post
coluna e, em seguida, unlist
e unname
o quadro de dados resultante:
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) trimws Podemos usar trimws
para aparar caracteres de palavras à esquerda e usá-los novamente para aparar os dois pontos.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Nota
A entrada string
é assumida como sendo:
string <- c("G1:E001", "G2:E002", "G3:E003")
_
como um separador e fez duas variáveis separadas para o prefixo e sufixo com base na resposta @Grothendieck:prefix <- sub("_.*", "", variable)
esuffix <- sub(".*_", "", variable)
Por exemplo, usando
gsub
ousub
fonte
Aqui está outra resposta simples
fonte
Tarde para a festa, mas para a posteridade, o pacote stringr (parte do popular conjunto de pacotes "tidyverse") agora fornece funções com assinaturas harmonizadas para manipulação de strings:
fonte
Isso deve fazer:
dá
fonte
Se você estiver usando,
data.table
entãotstrsplit()
é uma escolha natural:fonte
O pacote unglue fornece uma alternativa, não é necessário conhecimento sobre expressões regulares para casos simples, aqui faríamos:
Criado em 2019-11-06 pelo pacote reprex (v0.3.0)
Mais informações: https://github.com/moodymudskipper/unglue/blob/master/README.md
fonte