【问题标题】:Remove numbers from alphanumeric characters从字母数字字符中删除数字
【发布时间】:2012-11-15 10:08:37
【问题描述】:

我有一个字母数字字符列表,如下所示:

x <-c('ACO2', 'BCKDHB456', 'CD444')

我想要以下输出:

x <-c('ACO', 'BCKDHB', 'CD')

有什么建议吗?

# dput(tmp2)

structure(c(432L, 326L, 217L, 371L, 179L, 182L, 188L, 268L, 255L,..., 
), class = "factor")

【问题讨论】:

    标签: regex r


    【解决方案1】:

    您可以为此使用gsub

    gsub('[[:digit:]]+', '', x)
    

    gsub('[0-9]+', '', x)
    # [1] "ACO"    "BCKDHB" "CD" 
    

    【讨论】:

      【解决方案2】:

      如果您的目标只是删除数字,那么removeNumbers() 函数会从文本中删除数字。使用它可以降低出错的风险。

      library(tm)
      
      x <-c('ACO2', 'BCKDHB456', 'CD444') 
      
      x <- removeNumbers(x)
      
      x
      
      [1] "ACO"    "BCKDHB" "CD"    
      

      【讨论】:

      • 请格式化您的答案并提供有关您的答案如何优于已发布的答案的信息。另外:只有代码通常是不够的。你能解释一下你的解决方案是做什么的吗?
      【解决方案3】:

      使用stringr

      大多数 stringr 函数都处理正则表达式

      str_replace_all 会满足你的需求

      str_replace_all(c('ACO2', 'BCKDHB456', 'CD444'), "[:digit:]", "")
      

      【讨论】:

      • 这可能是大多数人的最佳答案。
      【解决方案4】:

      使用stringi的解决方案:

      # your data
      x <-c('ACO2', 'BCKDHB456', 'CD444')
      
      # extract capital letters
      x <- stri_extract_all_regex(x, "[A-Z]+")
      
      # unlist, so that you have a vector
      x <- unlist(x)
      

      一行解决方案:

      【讨论】:

      • 是一个不错的解决方案,但是我有带脚注的州名(我想删除),并且通过“哥伦比亚特区”,我得到三个字符值而不是一个。因此,我的输出向量比我的输入向量长得多。想法如何解决这个问题?
      • 您可以使用this solution,它适用于除华盛顿以外的所有州,因为它不是一个州。您必须手动将 DC 添加到 state.abbstate.name 向量中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多