2015-11-16 60 views
3

在我的数据框中有一个带有乘数指示符的列,例如数千,数百,百万等,作为文本R gsub一次替换几个文本

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

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

回答

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