Использование str_extract для извлечения суммы в долларах - PullRequest
0 голосов
/ 11 июня 2019

У меня есть столбец текста, и я хотел бы извлечь только сумму в долларах, содержащуюся в строке, используя знак доллара в качестве начала строки. Я могу сопоставить знак доллара, но не уверен, как потом брать цифры сразу после (и удалять запятые).

Я пытался использовать знак доллара в качестве якоря в str_extract, но не получаю только полную сумму в долларах.

input <- (c("the sum of $175,000,000 and the sum", "the sum of $20,000,000 and the sum", "the sum of $100,000,000 and the sum"))

df<-as.data.frame(input)

df %>% 
    mutate(amount = str_extract(input,"^\\$"))

запустить перед изменением это выглядит так:

input
the sum of $175,000,000 and the sum
the sum of $20,000,000 and the sum
the sum of $100,000,000 and the sum

Мне бы хотелось, чтобы это выглядело как:

input                                         amount
the sum of $175,000,000 and the sum        175000000
the sum of $20,000,000 and the sum          20000000
the sum of $100,000,000 and the sum        100000000

Ответы [ 3 ]

1 голос
/ 11 июня 2019

Вот один из способов:

library(stringr)

input <- (c("the sum of $175,000,000 and the sum", "the sum of $20,000,000 and the sum", "the sum of $100,000,000 and the sum"))

df<-as.data.frame(input)

#extract the $, the digits and commas
#then remove the $ and commas
df %>% mutate(amount = str_remove_all(str_extract(input,"\\$[0-9,]+"), "[\\$,]"))
1 голос
/ 11 июня 2019

Используя вспомогательную функцию parse_number из readr, вы можете сделать

df %>% 
  mutate(amount = parse_number(str_match(input,"\\$([0-9,.]+)")[,2]))

В основном мы используем str_match, чтобы убрать "$", а затем пропустить остаток через parse_number, чтобы сделатьэто числовое.Это также будет работать со значениями, такими как "$ 11.11"

. Вы также можете использовать базовую функцию as.numeric() вместо parse_number, но подумал, что я бы посоветовал это, если вы используете другие пакеты tidyverse.

0 голосов
/ 11 июня 2019

Использование base R

gsub(",", "", sub(".*[$]([0-9,]+)\\s*.*", "\\1", input))
#[1] "175000000" "20000000"  "100000000"
...