2016-03-18 36 views
0

我有一個數據集與此類似與大約80變量(標誌)到80000行R:每個變量,並採取總數

< Acc_Nbr flag1 flag2 flag3 flag4 Exposure 
< ab  1  0 1  0  1000 
< bc  0  1 1  0  2000 
< cd  1  1 0  1  3000 
< ef  1  0 1  1  4000 
< Expected Output 
< Variable Count_Acct_Number Sum_Exposure Total_Acct_Number Total_Expo 
< flag1   3     8000  4    10000 
< flag2   2     5000  4    10000 
< flag3   3     7000  4    10000 
< flag4   2     7000  4    10000 

基本上我想挽起輸出給我算的賬戶號碼和風險總額,每個變量標記爲1,前面是賬戶總數和風險敞口。

請幫忙。

回答

0

我們可以在「data.frame」轉換爲「data.table」(setDT(df1),將其與melt,通過「可變」分組重塑到「長」,我們得到「值1」的sumsum「暴露',其中‘VALUE1’爲1,行(.N)的數目,並在所有的值的sum‘曝光’,以獲得期望的輸出。

library(data.table) 
melt(setDT(df1), measure=patterns("^flag"))[, 
     list(Count_Acct_Number= sum(value1), 
      Sum_Exposure= sum(Exposure[value1==1]), 
      Total_Acct_Number = .N, 
      TotalExposure=sum(Exposure)), 
     by = variable] 
# variable Count_Acct_Number Sum_Exposure Total_Acct_Number TotalExposure 
#1: flag1     3   8000     4   10000 
#2: flag2     2   5000     4   10000 
#3: flag3     3   7000     4   10000 
#4: flag4     2   7000     4   10000 
0

甲straigthforward方式是使用doBy包

library(doBy) 
df <- data.frame(account=LETTERS[1:10], exposure=1:10*3.14, mark=round(runif(10))) 
res <- as.data.frame(summaryBy(exposure~mark+account, df, FUN=sum)) 
subset(res, mark==0) 

與所述原始數據開始(注意,樣本具有隨機量),則它

> df 
    account exposure mark 
1  A  3.14 1 
2  B  6.28 1 
3  C  9.42 0 
4  D 12.56 0 
5  E 15.70 1 
6  F 18.84 0 
7  G 21.98 1 
8  H 25.12 0 
9  I 28.26 1 
10  J 31.40 0 

給出了具有顯着的標誌(在這種情況下,沒有實際的總結,但會做的一樣好)的臨時結果

> res 
    mark account exposure.sum 
1  0  A   3.14 
2  0  D  12.56 
3  0  F  18.84 
4  0  H  25.12 
5  1  B   6.28 
6  1  C   9.42 
7  1  E  15.70 
8  1  G  21.98 
9  1  I  28.26 
10 1  J  31.40 

最終結果可以選擇

> subset(res, mark==0) 
    mark account exposure.sum 
1 0  A   3.14 
2 0  D  12.56 
3 0  F  18.84 
4 0  H  25.12 
相關問題