Oto kilka sposobów:
1) podp
sub(".*:", "", string)
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
3) przeczytaj. Tabelę
read.table(text = string, sep = ":", as.is = TRUE)$V2
4) podciąg
Zakłada się, że druga część zawsze zaczyna się od 4 znaku (tak jest w przykładzie w pytaniu):
substring(string, 4)
4a) podciąg / wyrażenie regularne
Gdyby dwukropek nie zawsze znajdował się w znanej pozycji, moglibyśmy zmodyfikować (4), wyszukując go:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc
zwraca część w nawiasach:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
6) przeczytaj.dcf
Ten działa tylko wtedy, gdy podciągi przed dwukropkiem są unikalne (tak jak w przykładzie w pytaniu). Wymaga również, aby separatorem był dwukropek (o którym mowa w pytaniu). Gdyby został użyty inny separator, moglibyśmy sub
najpierw zastąpić go dwukropkiem. Na przykład, jeśli separator był _
wtedystring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
7) oddzielne
7a) Używając tidyr::separate
, tworzymy ramkę danych z dwiema kolumnami, jedną dla części przed dwukropkiem, a drugą dla części po, a następnie wyodrębniamy drugą.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
7b) Alternatywnie separate
można użyć tylko do utworzenia post
kolumny, a następnie unlist
i unname
wynikowej ramki danych:
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
8) trimws Możemy użyć trimws
do przycięcia znaków słów z lewej strony, a następnie użyć go ponownie do przycięcia dwukropka.
trimws(trimws(string, "left", "\\w"), "left", ":")
Uwaga
string
Zakłada się, że dane wejściowe to:
string <- c("G1:E001", "G2:E002", "G3:E003")
_
jako separator i utworzyłem dwie oddzielne zmienne dla przedrostka i sufiksu w oparciu o odpowiedź @Grothendieck:prefix <- sub("_.*", "", variable)
isuffix <- sub(".*_", "", variable)