【问题标题】:R: Extracting a substring consisting of a number followed by a pattern (or a space and a pattern) without extracting other numbersR:提取由数字后跟模式(或空格和模式)组成的子字符串,而不提取其他数字
【发布时间】:2021-09-30 10:12:11
【问题描述】:

我正在从数据集中提取容器中的药片(或胶囊)的数量。金额和形式在描述列中的字符串中,其中包含许多其他信息。我想提取数量和指定形式的单词(TABLET 或 TAB 或 CAPSULE 等)。到目前为止,我已经尝试了以下方法。

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 个结果是期望的结果,因此只提取了 tablet 的数量和指定 tablet 的单词。第一个结果给出了 2 个数字,其中第一个 (3042020) 是不需要的。期望的结果是 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"   

我的问题是:如何在不读取不需要的其他数字的情况下获取可能包含空格的数字和表单文本?

提前致谢!

【问题讨论】:

    标签: r substring extract


    【解决方案1】:

    我认为您正在寻找的模式如下:

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

    为了解释上面的模式,它正在寻找一系列可能后跟空格的数字,这就是为什么会有 ?空间之后。之后,我正在寻找标签、平板电脑和胶囊这三个词,再次测试它们是否有 S。

    【讨论】:

      【解决方案2】:

      这对您的数据集来说太简单了吗?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-14
        • 2019-10-30
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多