Извлечь текст с помощью gsub - PullRequest
       1

Извлечь текст с помощью gsub

0 голосов
/ 05 сентября 2018

Я настраиваю процедуру автоматического анализа данных и, более или менее в конце процедуры, я хотел бы автоматически извлечь имя файла, который был проанализирован. У меня есть фрейм данных со столбцом, содержащим имена, со следующим стилем:

  • Исходный / Cell_Line_2_ KB_1813_B _Baseline
  • Доза 0001 / Cell_Line_3_ KB1720_1 _0001
  • Доза 0010 / Cell_Line_1_ KB1810 мат _0010

Я бы хотел выделить только символы, выделенные жирным шрифтом: «KB_1813_B», «KB1720_1» и «KB1810 mat» в отдельном столбце.

Я использовал gsub со следующей командой:

df$column.with.names <- gsub(".*KB|_.*", "KB", df$column.with.new.names)

Я мог бы легко удалить первую часть проблемы, но я застрял, пытаясь удалить вторую часть. Есть ли какая-то команда в gsub для удаления всего, начиная с конца имени, до тех пор, пока вы не встретите специальный символ (в моем случае "_")?

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Способ сделать это - использовать группы регулярных выражений:

x <- c("Baseline/Cell_Line_2_KB_1813_B_Baseline",
"Dose 0001/Cell_Line_3_KB1720_1_0001",
"Dose 0010/Cell_Line_1_KB1810 mat_0010")

gsub("^.+Cell_Line_._(.+)_.+$", "\\1", x)
[1] "KB_1813_B"  "KB1720_1"   "KB1810 mat"
0 голосов
/ 05 сентября 2018

Мы можем использовать str_extract

library(stringr)
str_extract(df$column.with.new.names, "KB_*\\d+[_ ]*[^_]*")
#[1] "KB_1813_B"  "KB1720_1"   "KB1810 mat"

Или тот же шаблон может быть записан как группа с sub

sub(".*(KB_*\\d+[_ ]*[^_]*).*", "\\1", df$column.with.new.names)
#[1] "KB_1813_B"  "KB1720_1"   "KB1810 mat"

Данные

df <- data.frame(column.with.new.names = c("Baseline/Cell_Line_2_KB_1813_B_Baseline", 
 "Dose 0001/Cell_Line_3_KB1720_1_0001",
  "Dose 0010/Cell_Line_1_KB1810 mat_0010"), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...