2012-07-20 71 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