Mutieren Sie mehrere Spalten in einem dataframe

Ich habe einen Datensatz, der wie folgt aussieht.

bankname    bankid  year    totass  cash    bond    loans
Bank A      1       1881    244789  7250    20218   29513
Bank B      2       1881    195755  10243   185151  2800
Bank C      3       1881    107736  13357   177612  NA
Bank D      4       1881    170600  35000   20000   5000
Bank E      5       1881    3200000 351266  314012  NA

und ich will berechnen Sie einige Kennzahlen, basierend auf der Bilanz der Banken. und ich möchte das dataset wie folgt Aussehen

bankname    bankid  year    totass  cash    bond    loans   CashtoAsset BondtoAsset LoanstoAsset
Bank A      1       1881    2447890 7250    202100  951300  0.002   0.082   0.388
Bank B      2       1881    195755  10243   185151  2800    0.052   0.945   0.014
Bank C      3       1881    107736  13357   177612  NA  0.123   1.648585431 NA
Bank D      4       1881    170600  35000   20000   5000    0.205   0.117   0.029
Bank E      5       1881    32000000    351266  314012  NA  0.0109  0.009   NA

Hier ist der code, der die Replikation von Daten

bankname <- c("Bank A","Bank B","Bank C","Bank D","Bank E")
bankid <- c( 1, 2,  3,  4,  5)
year<- c( 1881, 1881,   1881,   1881,   1881)
totass  <- c(244789,    195755, 107736, 170600, 32000000)
cash<-c(7250,10243,13357,35000,351266)
bond<-c(20218,185151,177612,20000,314012)
loans<-c(29513,2800,NA,5000,NA)
bankdata<-data.frame(bankname, bankid,year,totass, cash, bond, loans)

Zuerst entledigte ich mich der NAs in den Bilanzen.

cols <- c("totass", "cash", "bond", "loans")
bankdata[cols][is.na(bankdata[cols])] <- 0

Dann berechne ich Verhältnisse

library(dplyr)
bankdata<-mutate(bankdata,CashtoAsset = cash/totass)
bankdata<-mutate(bankdata,BondtoAsset = bond/totass)
bankdata<-mutate(bankdata,loanstoAsset =loans/totass)

Aber, statt-computing-alle diese Verhältnisse sind Zeile für Zeile, ich will einen look kreieren, um dies zu tun, alles auf einmal. In Stata, die ich tun würde,

foreach x of varlist cash bond loans {
by bankid: gen `x'toAsset = `x'/totass
}

Wie kann ich dies tun?

  • Meta-Kommentare: Beim übersetzen von einer Sprache zur anderen, Sie brauchen nicht zu wörtlich. Schleifen in Stata arbeiten oft besser als array-basierten Berechnungen im R. (Auch das Gegenteil wahr sein kann: die Neulinge Stata aus anderen Sprachen, die oft versuchen, die Schleifen über Beobachtungen, die nur selten benötigt werden.)
  • Ich vereinfachen meine Variablen hier, aber in meinem dataset habe ich über 20 Kategorien von Vermögenswerten, so dass eine Schleife ist hilfreich.
  • Ich habe nichts gegen Schleifen; ähnlich wie die typischen R-Nutzer wird sicherlich glücklich mit 20 Spalten....
  • Wie immer, ich Danke Ihnen für Ihre Hilfe. Ich Lerne viel von Ihnen.
  • Vielen Dank für das lassen mich wissen. Das mache ich ab jetzt.
InformationsquelleAutor H Park | 2014-10-06
Schreibe einen Kommentar