【问题标题】:Extract numbers from character string using patterns in R [duplicate]使用R中的模式从字符串中提取数字[重复]
【发布时间】:2020-11-02 03:58:09
【问题描述】:

我需要一些帮助来从 R 中的字符串中提取特定的代码数字。例如,我有下一个数据:

AMOXICIL/CLAVULAN 875/125 MG CM/CM REC (100000126)
HIDROCLOROTIAZIDA CM (50 MG) CONTENIDO (100028929)
ZIDOVUDINA 10 MG/ML O 50 MG/5 ML SOL ORAL O JARABE (500001802)

我需要出现在字符串末尾的代码数字(总是有 9 个数字)。最后在我的数据框中创建一个需要列:

                                                             1         2
            AMOXICIL/CLAVULAN 875/125 MG CM/CM REC (100000126) 100000126
            HIDROCLOROTIAZIDA CM (50 MG) CONTENIDO (100028929) 100028929
ZIDOVUDINA 10 MG/ML O 50 MG/5 ML SOL ORAL O JARABE (500001802) 500001802

感谢您的帮助。

【问题讨论】:

    标签: r string character


    【解决方案1】:

    您可以使用sub 提取字符串末尾的9位数字。

    sub('.*\\((\\d{9})\\)$', '\\1', df$V1)
    #[1] "100000126" "100028929" "500001802"
    

    您可以将as.numeric 换行以将此字符串转换为数字。

    类似地使用来自stringrstr_extract

    stringr::str_extract(df$V1, '\\d{9}(?=\\))')
    

    【讨论】:

    • 如果我有一些字符串,如“AMOXICILIN 300MG(100005324)”(代码编号和其余描述中没有空格)、“IBUPROFENO 100002345”(没有“(”)这样的模式)。我知道代码有 9 位。
    • @DiegoGonzalezAvalos 在这种情况下,您可以通过stringr::str_extract(df$V1, '\\d{9}') tp 获取字符串中的 9 位数字。
    【解决方案2】:

    也许不是最优雅的解决方案:

    #Data
    df <- structure(list(V1 = c("AMOXICIL/CLAVULAN 875/125 MG CM/CM REC (100000126)", 
    "HIDROCLOROTIAZIDA CM (50 MG) CONTENIDO (100028929)", "ZIDOVUDINA 10 MG/ML O 50 MG/5 ML SOL ORAL O JARABE (500001802)"
    )), row.names = c(NA, -3L), class = "data.frame")
    
    #Code
    df$index <- gsub(')','',gsub("^.*\\(","", df$V1 ))
    
                                                                  V1     index
    1             AMOXICIL/CLAVULAN 875/125 MG CM/CM REC (100000126) 100000126
    2             HIDROCLOROTIAZIDA CM (50 MG) CONTENIDO (100028929) 100028929
    3 ZIDOVUDINA 10 MG/ML O 50 MG/5 ML SOL ORAL O JARABE (500001802) 500001802
    

    【讨论】:

      【解决方案3】:

      一些潮汐选项:

      xx <- c("AMOXICIL/CLAVULAN 875/125 MG CM/CM REC (100000126)", "HIDROCLOROTIAZIDA CM (50 MG) CONTENIDO (100028929)", "ZIDOVUDINA 10 MG/ML O 50 MG/5 ML SOL ORAL O JARABE (500001802)")
      
      
      stringr::str_sub(xx, -11) %>% readr::parse_number()   # outputs as numeric
      stringr::str_sub(xx, -10, -2)                         # outputs as character
      

      【讨论】:

        猜你喜欢
        • 2017-02-17
        • 2022-12-18
        • 2017-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        • 2018-12-14
        • 1970-01-01
        相关资源
        最近更新 更多