Voici quelques moyens:
1) sous
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) lire le tableau
read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"
4) sous-chaîne
Cela suppose que la deuxième partie commence toujours au 4e caractère (ce qui est le cas dans l'exemple de la question):
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) sous-chaîne / regex
Si les deux points n'étaient pas toujours dans une position connue, nous pourrions modifier (4) en le recherchant:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc renvoie la partie entre parenthèses:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
Celui-ci ne fonctionne que si les sous-chaînes précédant les deux points sont uniques (ce qu'elles sont dans l'exemple de la question). Il faut aussi que le séparateur soit deux points (ce qui est dans la question). Si un séparateur différent était utilisé, nous pourrions l'utiliser subpour le remplacer d'abord par deux points. Par exemple, si le séparateur était _alorsstring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) séparé
7a) En utilisant tidyr::separatenous créons un bloc de données avec deux colonnes, une pour la partie avant les deux points et une pour après, puis extrayons cette dernière.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b) Alternativement separatepeut être utilisé pour simplement créer lepost colonne, puis unlistet unnamela trame de données résultant:
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) Trimws Nous pouvons utiliser trimwspour couper les caractères des mots sur la gauche, puis l'utiliser à nouveau pour couper les deux points.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Remarque
L'entrée stringest supposée être:
string <- c("G1:E001", "G2:E002", "G3:E003")
_comme séparateur et créé deux variables distinctes pour le préfixe et le suffixe en fonction de la réponse @Grothendieck:prefix <- sub("_.*", "", variable)etsuffix <- sub(".*_", "", variable)