Ecco alcuni modi:
1) sott
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) sottostringa
Ciò presuppone che la seconda parte inizi sempre dal 4 ° carattere (come nel caso dell'esempio nella domanda):
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) sottostringa / regex
Se i due punti non fossero sempre in una posizione nota, potremmo modificare (4) cercandolo:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc
restituisce la parte tra parentesi:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
Questo funziona solo se le sottostringhe prima dei due punti sono uniche (che sono nell'esempio nella domanda). Inoltre richiede che il separatore sia due punti (che è nella domanda). Se fosse usato un separatore diverso, potremmo usarlo sub
per sostituirlo prima con due punti. Ad esempio, se il separatore fosse _
allorastring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) separato
7a) Usando tidyr::separate
creiamo un frame di dati con due colonne, una per la parte prima dei due punti e una per i dopo, quindi estraiamo quest'ultima.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b) In alternativa separate
può essere utilizzato per creare semplicemente la post
colonna e quindi unlist
e unname
il frame di dati risultante:
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) trimws Possiamo usare trimws
per tagliare i caratteri delle parole a sinistra e poi usarli di nuovo per tagliare i due punti.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Nota
Si string
presume che l'input sia:
string <- c("G1:E001", "G2:E002", "G3:E003")
_
come separatore e creavo due variabili separate per il prefisso e il suffisso in base alla risposta di @Grothendieck:prefix <- sub("_.*", "", variable)
esuffix <- sub(".*_", "", variable)