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 sub
pour 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::separate
nous 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 separate
peut être utilisé pour simplement créer lepost
colonne, puis unlist
et unname
la 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 trimws
pour 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 string
est 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)