2012-07-20 43 views
1

由於熔化和隨後的鑄造[1]我得到以下的陣列的數據集的結果(sumStats.c)(?):如何計算鑄造數據幀部分內的分數?

, , group2 = G2_1, variable = area 

      group1 
group3  G1_1  G1_2  G1_3  G1_4 
    G3_1  0.000  0.000  0.00  0.000 
    G3_2  0.000  0.000  0.00  0.000 
    G3_3  0.000  0.000  0.00  0.000 
    G3_4  0.000  0.000  0.00  0.000 
    G3_5  0.000  0.000  0.00  0.000 
    G3_6  0.000  0.000  0.00  0.000 
    G3_7  0.000  0.000 26336.99 85236.488 
    G3_8  0.000 4999.235 87935.73 360062.128 
    G3_9  0.000  0.000  0.00  0.000 
    G3_10 7853.982 18538.285 49744.29 134180.428 
    G3_11  0.000  0.000  0.00 8830.825 
    G3_12  0.000  0.000  0.00  0.000 


, , grou2 = G2_2, variable = area 

     group1 
group3   G1_1  G1_2  G1_3  G1_4 
    G3_1  0.000  0.00  0.00  0.00 
    G3_2  0.000  0.00  0.00  0.00 
    G3_3  0.000  0.00  0.00  0.00 
    G3_4  0.000  0.00  0.00  0.00 
    G3_5  0.000  0.00  0.00  0.00 
    G3_6  0.000  0.00  0.00 51772.66 
    G3_7  0.000  0.00  0.00  0.00 
    G3_8 7853.982 22086.38 140874.76 523373.88 
    G3_9  0.000  0.00  0.00  0.00 
    G3_10  0.000 1415.79 23325.94 13407.49 
    G3_11  0.000  0.00  0.00  0.00 
    G3_12  0.000  0.00  0.00  0.00 


, , group2 = G2_3, variable = area 

      group1 
group3   G1_1  G1_2  G1_3  G1_4 
    G3_1  0.0000  0.000  0.000  0.0000 
    G3_2  0.0000  0.000  0.000  0.0000 
    G3_3  0.0000  0.000  0.000  93.2632 
    G3_4  0.0000  0.000  0.000  0.0000 
    G3_5  0.0000  0.000  0.000 46353.3814 
    G3_6  0.0000  0.000  0.000  0.0000 
    G3_7  0.0000  0.000  0.000  0.0000 
    G3_8 7390.0570 16851.829 101013.680 232666.8839 
    G3_9  0.0000 2541.574 6397.271 87825.7232 
    G3_10  0.0000  0.000  0.000  0.0000 
    G3_11 436.9895 4118.440 56572.140 173866.7915 
    G3_12  0.0000  0.000  0.000 47924.5494 

現在我需要每個group2內獲取變量(area)的分數相對於group3之間的每個group1的總和。例如,G2_1(group2)在G1_1(group1)中具有100%的G3_10(group3),G1_2(group1)具有G3_8的21.24%和G3_10的78.26%等等。一旦計算出每個列的百分比爲group1,我認爲我可以用melt()得到的數組獲得進一步分析所需的數據幀。

我覺得ddply()在這裏會有所幫助,但是由於我很難理解如何將它用於手頭的任務,如果有人能幫忙,我將不勝感激。

[1] 
sumStats.m <- melt(sumStats, id=c("group1", "group2", "group3"), "area") 
sumStats.c <- cast(sumStats.m, group3 ~ group1 ~ group2 ~ variable, sum) 
+1

所以每行將總結到100%? – James 2012-07-20 09:46:47

+0

對不起,@James,我在這裏錯過了你的問題!無論如何,我接受了你的答案,因爲它對正確的利潤率進行了輕微修改。 – ils 2012-07-20 10:51:36

回答

0

嘗試:

prop.table(sumstats.c,margin=c(1,3)) 

如:

x<-xtabs(~cyl+vs+am,mtcars) 
x 
, , am = 0 

    vs 
cyl 0 1 
    4 0 3 
    6 0 4 
    8 12 0 

, , am = 1 

    vs 
cyl 0 1 
    4 1 7 
    6 3 0 
    8 2 0 

prop.table(x,margin=c(1,3)) 
, , am = 0 

    vs 
cyl  0  1 
    4 0.000 1.000 
    6 0.000 1.000 
    8 1.000 0.000 

, , am = 1 

    vs 
cyl  0  1 
    4 0.125 0.875 
    6 1.000 0.000 
    8 1.000 0.000 
+0

謝謝你的指針@James!有一件事 - 'margin'參數需要用'c(2,3)'來計算列的比例。 – ils 2012-07-20 10:47:43