簡體   English   中英

R:提取由數字后跟模式(或空格和模式)組成的子字符串,而不提取其他數字

[英]R: Extracting a substring consisting of a number followed by a pattern (or a space and a pattern) without extracting other numbers

我正在從數據集中提取容器中的葯片(或膠囊)的數量。 金額和形式在描述列中的字符串中,其中包含很多其他信息。 我想提取數量和指定它是什么形式的單詞(平板電腦或標簽或膠囊等)。 到目前為止,我已經嘗試了以下方法。

testdescript = c("CARBAMAZEPINE EXTENDED RELEASE TABLETS USP400 MG DRG LIC NO TLCT17HZ2019201757131 DT3042020 100 TABS", "100MGCARBAMAZEPINECARBATOL 100 TABLET CARBAM", "TEGRITAL CR400 x10TAB CARBAMAZEPINE10", "TEGRITAL200 CARBAMAZEPINE200 100 TAB","CARBAMAZEPINE300 MG X120 CAPSULES FOR RESEARCH PURPOSE ONLY NCV") 
pattern = c("([0-9/]+[[:space:]])+TABS", " [0-9/]+TABS", "([0-9/]+[[:space:]])+TABLET","[0-9/]+TABLET", "[0-9/]+[[:space:]]+TAB", "[0-9/]+TAB","([0-9/]+[[:space:]])+CAPSULES","[0-9/]+CAPSULES")
str_extract(testdescript,paste0(pattern, collapse = '|'))
##which gives
[1] "3042020 100 TABS" "200 TABLET"       "10TAB"            "100 TAB"          "120 CAPSULES"  

最后 4 個結果是所需的結果,因此只提取了葯片數量和指定葯片的單詞。 第一個結果給出了第一個 (3042020) 不需要的 2 個數字。 預期的結果是 100 TABS。 我還為該模式嘗試了以下代碼,它給出了類似的結果,但在第四個結果( 200 100 TAB)中有一個額外的錯誤。

pattern2 =c("([0-9/]|([0-9/]+[[:space:]]))+TABS", "([0-9/]|([0-9/]+[[:space:]]))+TABLET","([0-9/]|([0-9/]+[[:space:]]))+TAB", "([0-9/]|([0-9/]+[[:space:]]))+CAPSULES")
str_extract(testdescript,paste0(pattern2, collapse = '|'))
[1] "3042020 100 TABS" "100 TABLET"       "10TAB"            "200 100 TAB"      "120 CAPSULES"   

我的問題是:如何獲取可能包含空格的數字和表單文本而不閱讀不需要的其他數字?

提前致謝!

我認為您正在尋找的模式如下:

str_extract(string = testdescript, pattern = "[0-9]+ ?(TABS?|TABLETS?|CAPSULES?)")

為了解釋上面的模式,它正在尋找一系列數字,后面可以跟一個空格,這就是為什么有一個 ? 空間之后。 在那之后,我正在尋找單詞標簽、片劑和膠囊,再次測試它們是否有 S。

這對您的數據集來說太簡單了嗎?

str_extract(testdescript, "(?<=[[:space:]]|x|X)[0-9]+[[:space:]]?(TAB|TABS|TABLET|CAPSULES)")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM