如何从 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
,我们提取之后的所有内容。
另一个使用 dplyr
和 stringr
的选项是:
library(dplyr)
library(stringr)
details %>%
mutate(detail_1 = str_extract(details, ".*(MG|ML)[^.$]"),
detail_2 = str_remove(details, detail_1))
我正在尝试从格式非常不同的列中提取一些特定字符,但我的代码存在一些问题。我正在使用下一个 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
,我们提取之后的所有内容。
另一个使用 dplyr
和 stringr
的选项是:
library(dplyr)
library(stringr)
details %>%
mutate(detail_1 = str_extract(details, ".*(MG|ML)[^.$]"),
detail_2 = str_remove(details, detail_1))