2015-11-16 2 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

Try:

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

Смежные вопросы