Вот несколько способов:
1) суб
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) Стрсплит
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) подстрока
Это предполагает, что вторая часть всегда начинается с 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) отдельный
7a) Используя, 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)
Например, используя
gsub
илиsub
источник
Вот еще один простой ответ
источник
Поздно, но для потомков, пакет stringr (часть популярного пакета «tidyverse») теперь предоставляет функции с согласованными сигнатурами для обработки строк:
источник
Это должно сделать:
дает
источник
Если вы используете,
data.table
тоtstrsplit()
это естественный выбор:источник
Пакет unglue предоставляет альтернативу, для простых случаев никаких знаний о регулярных выражениях не требуется, вот что мы сделаем:
Создано 2019-11-06 пакетом представлением (v0.3.0)
Дополнительная информация: https://github.com/moodymudskipper/unglue/blob/master/README.md
источник