Как извлечь персонажи из колонки с совершенно разными данными в R - PullRequest
1 голос
/ 20 апреля 2020

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

details<-data.frame(details=c("MG/0,9 ML SOL. INY. JRP",
                        "MG CM REC",
                        "MG LIOFIL P/INF. IV FAM",
                        "MG/ 5ML SOL. INY",
                        "MG/ML SOL.ORAL FC 100-200ML"))

Я пытаюсь использовать функцию extract(), но я не знаю, как кодировать часть регулярного выражения:

extract(details,"details",c("detail_1","detail_2"),regex = ??)

I ' Я хочу наконец получить следующие два столбца:

      detail_1              detail_2
1    MG/0,9 ML         SOL. INY. JRP
2           MG                CM REC
3           MG  LIOFIL P/INF. IV FAM
4      MG/ 5ML              SOL. INY
5        MG/ML SOL.ORAL FC 100-200ML

Любая помощь высоко ценится. Заранее спасибо!

1 Ответ

3 голосов
/ 20 апреля 2020

Используя extract, мы можем сделать:

tidyr::extract(details, details, c("detail_1","detail_2"), 
               regex = '(.*(?:MG|ML)[^.$])(.*)')

#   detail_1              detail_2
#1 MG/0,9 ML          SOL. INY. JRP
#2        MG                 CM REC
#3        MG   LIOFIL P/INF. IV FAM
#4   MG/ 5ML               SOL. INY
#5     MG/ML  SOL.ORAL FC 100-200ML

Для detail_1 мы извлекаем все, пока не встретим либо "MG", либо "ML", что не является концом предложения. Для detail_2 мы извлекаем все после этого.


Другой вариант, использующий dplyr и stringr, будет:

library(dplyr)
library(stringr)

details %>%
  mutate(detail_1 = str_extract(details, ".*(MG|ML)[^.$]"), 
         detail_2 = str_remove(details, detail_1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...