如何从 R 中数据差异很大的列中提取字符

How to extract chraracters from column with very differently data in R

我正在尝试从格式非常不同的列中提取一些特定字符,但我的代码存在一些问题。我正在使用下一个 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 = ??)

我想最终获得接下来的两列:

      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

非常感谢任何帮助。提前致谢!

使用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,我们提取之后的所有内容。


另一个使用 dplyrstringr 的选项是:

library(dplyr)
library(stringr)

details %>%
  mutate(detail_1 = str_extract(details, ".*(MG|ML)[^.$]"), 
         detail_2 = str_remove(details, detail_1))