R gsub一次替换多个文本

3

在我的数据框中,有一个包含乘数指示器的列,例如千、百万等,以文本形式出现

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

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)))
1个回答

5

尝试:

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))

1
两种方法都完美地工作。然而,stringi 的方法安装的依赖要比 qdap 少得多。 - PavoDive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接