我有一個看起來像這樣的數據集。在數據框中改變多列
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
我想根據銀行資產負債表計算一些比率。我想數據集看起來像這樣
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
這裏是複製數據
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)
首先代碼,我在資產負債表中擺脫的NAS。
cols <- c("totass", "cash", "bond", "loans")
bankdata[cols][is.na(bankdata[cols])] <- 0
然後我計算比
library(dplyr)
bankdata<-mutate(bankdata,CashtoAsset = cash/totass)
bankdata<-mutate(bankdata,BondtoAsset = bond/totass)
bankdata<-mutate(bankdata,loanstoAsset =loans/totass)
但是,而不是通過線計算所有這些比率線,我想創建一個看一次全部做到這一點。在Stata,我會做
foreach x of varlist cash bond loans {
by bankid: gen `x'toAsset = `x'/ totass
}
我該怎麼做?
元點評:當從一種語言翻譯成另一種,你不必過於直譯。在Stata中的循環通常在R中基於數組的計算方面效果更好。(甚至相反可能是正確的:來自其他語言的Stata的新手經常嘗試循環觀察,這很少需要。) – 2014-10-06 17:42:06
我簡化了我的變量,但是在我的數據集,我有超過20類資產,所以有一個循環是有幫助的。 – 2014-10-06 18:16:55
我沒有反對循環;同樣典型的R用戶肯定對20列感到滿意.... – 2014-10-06 18:17:47