Ось кілька способів:
1) підряд
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) стрспліт
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) для читання
read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"
4) підрядка
Це передбачає, що друга частина завжди починається з 4-го символу (що стосується прикладу у запитанні):
substring(string, 4)
## [1] "E001" "E002" "E003"
4а) підрядка / регекс
Якщо товста кишка не завжди була у відомій позиції, ми могли б її змінити (4) шляхом пошуку:
substring(string, regexpr(":", string) + 1)
5) страпплик
strapplyc
повертає скоплену в скобку частину:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
Цей працює лише в тому випадку, якщо підрядки перед двокрапкою є унікальними (про що вони є у прикладі у запитанні). Також вимагає, щоб роздільник був двокрапкою (про що йдеться в питанні). Якщо використовується інший роздільник, то ми могли б sub
спочатку замінити його двокрапкою. Наприклад, якщо роздільник був _
потімstring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) окремо
7а) Використовуючи, tidyr::separate
ми створюємо кадр даних з двома стовпцями, один для частини перед двокрапкою та другий після, а потім витягуємо останній.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b) По черзі separate
можна використовувати просто створення post
стовпця, а потімunlist
і unname
отриманий кадр даних:
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) обрізки Ми можемо використовуватиtrimws
для обрізання символів слова зліва, а потім знову використовувати для обрізки двокрапки.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Примітка
Вхід string
вважається таким:
string <- c("G1:E001", "G2:E002", "G3:E003")
_
як роздільник і зробила дві окремі змінні для префікса та суфікса на основі відповіді @Grothendieck:prefix <- sub("_.*", "", variable)
таsuffix <- sub(".*_", "", variable)