2017-08-31 1 views
2

Wie der Titel andeutet, suche ich nach einer Möglichkeit, abgekürzten Kurzzeichen-Buchstaben in numerische Daten umzuwandeln. Zum Beispiel würde Ich mag diese Änderungen in meinem Datenrahmen machen:Ändern von Millionen/Milliarden Abkürzungen in tatsächliche Zahlen? dh. 5.12M -> 5.120.000

84.06M -> 84,060,000 
30.12B -> 30,120,000,000 
9.78B -> 9,780,000,000 
251.29M -> 251,29,000 

Hier ist ein Beispiel von einigen der Datenrahmen Ich arbeite mit:

Index Market Cap Income Sales Book/sh 
ZX    -  84.06M -1.50M 359.50M 7.42 
ZTS  S&P 500  30.13B 878.00M 5.02B 3.49 
ZTR    -   -   -  -  - 
ZTO    -  9.78B 288.30M 1.47B 4.28 
ZPIN   -  1.02B 27.40M 285.20M 4.27 
ZOES   - 251.29M -0.20M 294.10M 6.79 
ZNH    -  10.92B 757.40M 17.26B 33.23 
ZF    -   -   -  -  - 
ZEN    -  2.78B -106.70M 363.60M 3.09 
ZBK    -  6.06B   - 2.46B 34.65 
ZBH  S&P 500  22.76B 712.00M 7.78B 50.94 

Hat jemand ein paar Vorschläge? Ich dachte gsub in der Basis r ...

+0

Wenn diese aus einem anderen Format stammen, gibt es möglicherweise einen direkteren Weg. Wenn es sich beispielsweise um Werte in einer Excel-Arbeitsmappe handelt, sind Sie möglicherweise mit 'readxl :: read_excel (the-excel-file.xlsx) 'besser dran. – Hugh

Antwort

1

Try this:

income <- c("84.06M", "30.12B", "251.29M") 

toInteger <- function(income){ 
    amt <- as.numeric(gsub("[A-Z]", "", income)) 
    multiplier <- substring(income, nchar(income)) 
    multiplier <- dplyr::case_when(multiplier == "M" ~ 1e6, 
           multiplier == "B" ~ 1e9, 
           TRUE ~ 1) # you can add on other conditions for more suffixes 
    amt*multiplier 
} 

>toInteger(income) 
[1] 8.4060e+07 3.0120e+10 2.5129e+08 
1

Sie alle wie diese Ihre Spalten ändern können:

test = c("30.13B","84.06M","84.06B","84.06M") 
values = sapply(strsplit(test,c("B","M")),function(x) as.numeric(x)) 
amount = sapply(strsplit(test,""), function(x) x[length(x)]) 
values2 = sapply(1:length(amount),function(x) ifelse(amount[x] == "B",values[x]*1e9,values[x]*1e6)) 

nur Test ersetzen mit der Datenrahmen Spalte, die Sie wollen Ändern und value für den Dataform-Namen und die Spalte, die Sie ändern

5

Sie können dies

versuchen
num <- c("1.23M", "15.69B", "123.999M") 
num <- gsub('B', 'e9', num) 
num <- gsub('M', 'e6', num) 
format(as.numeric(num), scientific = FALSE, big.mark = ",") 

"84,060,000" "30,120,000,000" "251,290,000" 
Verwandte Themen