Найти шаблон строки, присваивая новую переменную в r - PullRequest
1 голос
/ 28 января 2020

У меня есть следующие данные

Mydata <- data_frame(
    myfield = c("ABC MUVBC82668689230230",
             "C3 MVBT7927979279279.",
             "t4 MUDW0348737237907023.",
             "D18 MVGJH979247979027903")
  )

Я пытаюсь извлечь часть строки, которая начинается с «MU» и «MV», создав новую переменную для сохранения результата. Желаемый результат будет:

MUVBC82668689230230
MVBT7927979279279
MUDW0348737237907023
MVGJH979247979027903

Что я пробовал до сих пор:

pattern <- str_locate(Mydata$myfield, "\\d+\\-\\d+MU|\\d+\\-\\d+MV")

mydata$myfield2 <- str_extract(mydata$myfield2, pattern)

 Mydata <- Mydata %>%
            mutate(myfield2 = str_sub(Mydata$myfield2, pattern))

Mydata <- Mydata %>%
    mutate(myfield2= str_extract(myfield, pattern = "MV\\d+"))

 Mydata <- Mydata %>%
        mutate(myfield2 = str_extract_all("(?<=^| )(MU|MV).*?(?=$| )"))

Mydata <- Mydata %>%
    mutate(myfield2= str_extract(myfield, "Mv\\d+(_[A-Z]+)*"))

Я обычно использую substr (), но в моих данных шаблон не всегда начинается в та же позиция. Любое руководство приветствуется.

1 Ответ

2 голосов
/ 28 января 2020

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

library(dplyr)
library(stringr)
Mydata %>% 
       mutate(myfield = str_remove_all(myfield, ".*\\s+|\\.$"))

или с str_extract

Mydata %>% 
      mutate(myfield = str_extract(myfield, "\\bM[UV][[:alnum:]]+"))
# A tibble: 4 x 1
#  myfield             
#  <chr>               
#1 MUVBC82668689230230 
#2 MVBT7927979279279   
#3 MUDW0348737237907023
#4 MVGJH979247979027903

Обратите внимание, что некоторые шаблоны в коде OP не будут совпадать, потому что "MV\\d+" подразумевает одну или несколько цифр после 'MV', что не соответствует действительности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...