【问题标题】:How do I remove parts of strings using stringr and rebus?如何使用 stringr 和 rebus 删除部分字符串?
【发布时间】:2018-02-01 06:25:51
【问题描述】:

我想使用stringrrebus 删除数据框中的部分字符串。具体来说,我想删除以空格和数字开头的部分,直到结束。

以下是我的数据框:

df<-data.frame(ID = 1:8, Medication = c("FOLIC ACID 5MG TABLET", "RIBAVIRIN 200MG TAB", "ACARBOSE 50MG TABLET", 
                                        "AmLODIPine 5MG TABLET", "MAGNESIUM TRISILICATE MIXTURE 200ML", 
                                        "RESONIUM 15G/60ML SUSPENSION", "CALCIUM & VIT D TABLET", NA))

我想要的数据框是:

df_new<-data.frame(ID = 1:8, Medication = c("FOLIC ACID", "RIBAVIRIN", "ACARBOSE", 
                                            "AmLODIPine", "MAGNESIUM TRISILICATE MIXTURE", 
                                            "RESONIUM", "CALCIUM & VIT D TABLET", NA))

我尝试了以下代码,但它只有助于删除药物强度(例如 5MG)而不是测量单位(例如 TABLET):

df %>% mutate(Medication = str_replace(Medication, pattern = SPC %R% 
                                         one_or_more(DGT) %R% 
                                         one_or_more(WRD) %R%
                                         or(one_or_more(SPC), one_or_more(WRD)), 
                                       replace = ""))

我该怎么做?

【问题讨论】:

    标签: r data-manipulation stringr text-manipulation


    【解决方案1】:
      transform(df,Medication=sub("\\s\\d.*","",df$Medication))
      ID                    Medication
    1  1                    FOLIC ACID
    2  2                     RIBAVIRIN
    3  3                      ACARBOSE
    4  4                    AmLODIPine
    5  5 MAGNESIUM TRISILICATE MIXTURE
    6  6                      RESONIUM
    7  7        CALCIUM & VIT D TABLET
    8  8                          <NA>
    

    【讨论】:

    • 请问[:digit:]\d有什么区别?
    • 据我所知英语没有区别。
    • 虽然[0-9]\d之间存在差异,因为[0-9]只匹配0-9,而\d将匹配来自罗马、希伯来等的其他数字。
    • 您可以click here了解更多信息
    猜你喜欢
    • 2021-10-02
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2019-02-08
    • 2011-03-07
    相关资源
    最近更新 更多