замена всех символов между двумя шаблонами в r

#r #regex #dataframe #gsub

#r #регулярное выражение #фрейм данных #gsub

Вопрос:

У меня есть фрейм данных со следующим столбцом:

   Col_A
tr_1 A1; gn_1 TG1;
tr_2 A2; gn_2 TG2;
tr_3 A3; gn_3 TG3;
tr_4 A4; gn_4 TG4;
tr_5 A5; gn_5 TG5;
  

Я хотел бы использовать команду gsub и регулярное выражение, чтобы удалить все символы от начала до конца строки «gn_1» во всех строках фрейма данных. Или замените все эти символы на «».

То, что я хотел бы иметь в конце, выглядит следующим образом:

  Col_A
 TG1
 TG2
 TG3
 TG4
 TG5
  

У вас есть какие-либо идеи, как я могу это сделать в r.

Комментарии:

1. Попробуйте sub("^.*gn_\d \s([[:alnum:]] ).*$", "\1", x) .

Ответ №1:

Следующее регулярное выражение будет делать то, что вы хотите.

 sub("^.*gn_\d \s([[:alnum:]] ).*$", "\1", df1$Col_A)
#[1] "TG1" "TG2" "TG3" "TG4" "TG5"
  

Данные в dput формате.

 df1 <-
structure(list(Col_A = structure(1:5, 
.Label = c("tr_1 A1; gn_1 TG1;", "tr_2 A2; gn_2 TG2;", 
"tr_3 A3; gn_3 TG3;", "tr_4 A4; gn_4 TG4;", 
"tr_5 A5; gn_5 TG5;"), class = "factor")), 
class = "data.frame", row.names = c(NA, -5L))
  

Ответ №2:

Вы всегда можете использовать stringi пакет:

 library(stringi)
stri_extract_last_words(df1$Col_A)
[1] "TG1" "TG2" "TG3" "TG4" "TG5"
  

РЕДАКТИРОВАТЬ: просто перечитайте ваш вопрос (предполагается, что после gn_# всегда есть одно слово, используйте его с осторожностью)

Ответ №3:

Я получил то, что хотел, с помощью следующей команды. Я публикую это здесь, если кто-то искал ответ.

DF$col <- gsub("^tr.*gn_. ", "", DF$col)

DF$col <- gsub(";", "", DF$col)