【问题标题】:R gsub replace several texts at onceR gsub 一次替换多个文本
【发布时间】:2015-11-16 18:36:53
【问题描述】:

在我的数据框中有一列带有乘数指标,例如千、百、百万等,作为文本

我想将它们转换为数字。这是我尝试过的:

a <- c("Thousands", "thousands", "Hundreds", "hundreds")
newA <- as.numeric(gsub("[Tt]housands","1000",gsub("[Hh]undreds","100",a)))

这可行,但是当有许多乘数时结果非常麻烦(就像这种情况一样)。我在想应该有一种方法可以在一个gsub 电话中做到这一点,但无法做到。我想要这样的东西(当然这种特殊的尝试没有奏效):

as.numeric(gsub("^.*-","",gsub("([Hh]undreds)([Tt]housands)","\\1-100 \\2-1000",a)))

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    试试:

    library(qdap)
    as.numeric(multigsub(c("[Tt]housands", "[Hh]undreds"), c(1000, 100), fixed = FALSE, a))
    

    或者按照@RichardScriven 的建议:

    library(stringi)
    as.numeric(stri_replace_all_regex(a, c("[Tt]housands", "[Hh]undreds"), c(1000, 100), 
                                      vectorize_all = FALSE))
    

    【讨论】:

    • 两种方法都可以完美运行。不过,stringi 安装的依赖项qdap 少很多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2020-05-07
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多