我正在尝试将显示数字的字符对象转换为其适当的数字形式。对象的某些值类似于带有书面数字的数字,例如“ 1050万”和“ 12.35亿”。问题在于,写出的数字之前的实际数字的小数位数会因值而异。
例如:6940万,7010万,1200万等。
我如何轻松地将写出的数字转换为实际数字,使其与实际概念数字匹配?
我正在使用此代码尝试清理两个表的Gross_domestic列,但我不知道如何完成此操作以使其全部为数字:
library(pacman)
pacman::p_load(httr, tidyverse, rvest, janitor)
grconurl <- "https://www.conservapedia.com/Essay:Greatest_Conservative_Movies"
woliburl <- "https://www.conservapedia.com/Essay:Worst_Liberal_Movies"
grcon <- read_html(grconurl)
wolib <- read_html(woliburl)
grcon_tabel <- grcon %>%
html_node(".wikitable") %>%
html_table(., fill = T) %>%
clean_names()
wolib_table <- wolib %>%
html_node(".wikitable") %>%
html_table(., fill = T) %>%
clean_names()
grcon_tabel$gross_domestic <- grcon_tabel$gross_domestic %>%
str_replace(
pattern = ',',
replacement = ('')) %>%
str_replace(
pattern = '\\$',
replacement = ('')
) %>%
str_replace(
pattern = '\\[[:digit:][:digit:]]',
replacement = ('')
)
答案 0 :(得分:1)
library("tidyverse")
(使用您网址中的某些值)
vals <- c("$34,543,701", "$69.40 million","$1.519 billion","junk")
dd <- tibble(vals)
(dd
%>% mutate(vals=str_remove_all(vals,"(,|\\$|\\[.*\\]|\\(.*\\))", ## strip extraneous chars
multiplier=ifelse(str_detect(vals,"million"),1e6,
ifelse(str_detect(vals,"billion"),1e9,1)),
vals=str_remove(vals,"(m|b)illion"), ## drop words
vals=as.numeric(vals)*multiplier)
%>% select(-multiplier) ## drop auxiliary variable
)
我在示例中故意保留了一个非数字值(因为您提供的示例中存在这样的值);这将触发来自as.numeric()
的警告。您可以在管道中的特定元素周围使用suppressWarnings()
...