Преобразование кассовых сборов фильмов в числа

У меня есть фрейм данных в R с указанным номером кассы, например, 121,5 млн долларов и 0,014 млн долларов, и я хотел бы преобразовать их в прямые числа. Я думаю о чередовании $ и M, а затем использовать базовое умножение. Есть лучший способ сделать это?

3 ответа

Решение

Вы можете сделать это либо путем сопоставления нечисловых элементов ([^0-9.]*) и заменить его на ''

 as.numeric(gsub("[^0-9.]*", '', "$121.5M"))
 #[1] 121.5

Или специально сопоставляя $ а также M ([$M]) и заменить его на ''

 as.numeric(gsub("[$M]", '',"$121.5M"))
 #[1] 121.5

Обновить

Если у вас есть вектор, как показано ниже

v1 <- c("$1.21M", "$0.5B", "$100K", "$1T", "$0.9P", "$1.5K") 

Создайте еще один вектор с номерами и установите имена с соответствующими сокращениями

v2 <- setNames(c(1e3, 1e6, 1e9, 1e12, 1e15), c('K', 'M', 'B', 'T', 'P'))

Используйте это в качестве индекса, чтобы заменить аббревиатуру и умножить ее на числовую часть вектора.

 as.numeric(gsub("[^0-9.]*", '',v1))* v2[sub('[^A-Z]*', '', v1)]

Функция extract_numeric от tidyr Пакет удаляет все нечисловые символы из строки и возвращает число. С вашим примером:

library(tidyr)
dat <- data.frame(revenue = c("$121.5M", "$0.014M"))
dat$revenue2 <- extract_numeric(dat$revenue)*1000000

dat
  revenue  revenue2
1 $121.5M 121500000
2 $0.014M     14000

Это удаляет $ и переводит K а также M в e3 а также e6, В виньетке gsubfn есть пример, очень похожий на этот.

library(gsubfn)
x <- c("$1.21M", "$100K")  # input

ch <- gsubfn("[KM$]", list(K = "e3", M = "e6", "$" = ""), x)
as.numeric(ch)
## [1] 1210000  100000

as.numeric Строка может быть опущена, если вам не нужно преобразовывать ее в числовой.

Другие вопросы по тегам