Могут быть пакеты, которые обеспечивают функции для преобразования, например. "$23.93M"
к 239600000.00
, но вот один подход функционирует с использованием базы R:
listings$MktCap <- as.numeric(
sub("\\$(\\d+(\\.\\d+)?)[A-Z]?", "\\1", listings$MarketCap)) *
ifelse(gsub("[^A-Z]", "", listings$MarketCap) == "M", 1e6,
ifelse(gsub("[^A-Z]", "", listings$MarketCap) == "B", 1e9, 1.0))
head(listings[order(listings$MktCap, decreasing = TRUE),], 5)
# Symbol Name LastSale MarketCap IPOyear Sector
#382 AAPL Apple Inc. 94.69 $525.02B 1980 Technology
#1637 GOOGL Alphabet Inc. 717.29 $493.72B NA Technology
#1636 GOOG Alphabet Inc. 695.85 $478.97B 2004 Technology
#2238 MSFT Microsoft Corporation 51.18 $404.8B 1986 Technology
#6664 XOM Exxon Mobil Corporation 81.23 $338.16B NA Energy
#
# Industry Exchange MktCap
#382 Computer Manufacturing NASDAQ 525020000000
#1637 Computer Software: Programming, Data Processing NASDAQ 493720000000
#1636 Computer Software: Programming, Data Processing NASDAQ 478970000000
#2238 Computer Software: Prepackaged Software NASDAQ 404800000000
#6664 Integrated oil Companies NYSE 338160000000
Вкратце,
sub("\\$(\\d+(\\.\\d+)?)[A-Z]?", "\\1", listings$MarketCap)
экстракты только десятичное число часть MarketCap
, например, 525.02
от $525.02B
; и результат передается as.numeric
gsub("[^A-Z]", "", listings$MarketCap)
удаляет все, кроме прописных букв, которые должны быть только B
или M
, насколько я могу видеть
- Использование вложенных
ifelse
заявления, результатом этого выражения будет отображать "B"
в 1e9
, "M"
к 1e6
, а все остальное до 1
на данный момент, MktCap
должно быть правильное числовое представление MarketCap
и сортировка проста.