R gsub 一次替换多个文本
R gsub replace several texts at once
在我的dataframe中有一列有乘数指标,比如千,亿,百万等等,as text。
我想将它们转换为数字。这是我试过的:
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)))
尝试:
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))
在我的dataframe中有一列有乘数指标,比如千,亿,百万等等,as text。
我想将它们转换为数字。这是我试过的:
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)))
尝试:
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))