En voici quelques exemples :
1) sous
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) lire.table
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 4ème caractère (ce qui est le cas dans l'exemple de la question) :
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) substring/regex
Si le colon n'était 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) lire.dcf
Celle-ci ne fonctionne que si les sous-chaînes précédant les deux-points sont uniques (ce qui est le cas dans l'exemple de la question). Elle exige également que le séparateur soit deux-points (ce qui est le cas dans la question). Si un séparateur différent était utilisé, nous pourrions utiliser sub
pour le remplacer par un deux-points en premier. Par exemple, si le séparateur était _
puis string <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) séparer
7a) Utilisation de tidyr::separate
nous créons un cadre de données avec deux colonnes, une pour la partie avant les deux points et une pour la partie après, puis nous 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 créer simplement le post
et ensuite unlist
y unname
le cadre 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 à gauche, puis utilisez-le à nouveau pour couper les deux points.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Note
L'entrée string
est supposé être :
string <- c("G1:E001", "G2:E002", "G3:E003")