2016-05-06 5 views
0

Ich versuche, aus den folgenden Daten eine Pivot-Tabelle zu erstellen:Erstellen proportional Pivot-Tabelle mit mehreren Variablen in R

Scan Distance NOFO ID 
    1  1.0 NANA A12 
    2  1.0 NANA A10 
    3  2.0 HAHT A12 
    4  4.0 TANA A1 
    5  1.0 TANA A3 
    6  0.5 TATA A1 

möchte ich die Anteile von NOFO für jede Entfernung und ID.

Ich habe versucht mit ftable, dcast und tapply Funktionen und bin in der Lage es für NOFO ~ Entfernung zu tun:

prop.table(table(df$NOFO, df$Distance, useNA = "ifany"))) 

Beispiel führen:

 0.5   1   2   4  
HAHT 0.003012048 0.000000000 0.000000000 0.003012048 
NANA 0.000000000 0.000000000 0.003012048 0.000000000 
TANA 0.000000000 0.000000000 0.003012048 0.003012048 
TATA 0.000000000 0.000000000 0.000000000 0.000000000 

Aber ich habe nicht war in der Lage, eine Lösung für NOFO ~ Distance + ID zu finden, so dass jeder Distanzanteil pro ID aufgeteilt wird.

+0

können Sie Ihren Code schreiben für 'NOFO ~ Distance', die gearbeitet? – Sotos

+0

Benötigen Sie 'prop.table (acast (df1, NOFO ~ Abstand + ID, value.var =" NOFO ", Länge))' – akrun

Antwort

0

Fügen Sie einfach ID als dritte Variable.

prop.table(table(df$NOFO, df$Distance, df$ID, useNA = "ifany")) 
, , = A1 


      0.5   1   2   4 
    HAHT 0.0000000 0.0000000 0.0000000 0.0000000 
    NANA 0.0000000 0.0000000 0.0000000 0.0000000 
    TANA 0.0000000 0.0000000 0.0000000 0.1666667 
    TATA 0.1666667 0.0000000 0.0000000 0.0000000 

, , = A10 


      0.5   1   2   4 
    HAHT 0.0000000 0.0000000 0.0000000 0.0000000 
    NANA 0.0000000 0.1666667 0.0000000 0.0000000 
    TANA 0.0000000 0.0000000 0.0000000 0.0000000 
    TATA 0.0000000 0.0000000 0.0000000 0.0000000 

, , = A12 


      0.5   1   2   4 
    HAHT 0.0000000 0.0000000 0.1666667 0.0000000 
    NANA 0.0000000 0.1666667 0.0000000 0.0000000 
    TANA 0.0000000 0.0000000 0.0000000 0.0000000 
    TATA 0.0000000 0.0000000 0.0000000 0.0000000 

, , = A3 


      0.5   1   2   4 
    HAHT 0.0000000 0.0000000 0.0000000 0.0000000 
    NANA 0.0000000 0.0000000 0.0000000 0.0000000 
    TANA 0.0000000 0.1666667 0.0000000 0.0000000 
    TATA 0.0000000 0.0000000 0.0000000 0.0000000 

oder wenn Sie einen flachen Tisch bevorzugen

> ftable(.Last.value) 
       A1  A10  A12  A3 

HAHT 0.5 0.0000000 0.0000000 0.0000000 0.0000000 
    1 0.0000000 0.0000000 0.0000000 0.0000000 
    2 0.0000000 0.0000000 0.1666667 0.0000000 
    4 0.0000000 0.0000000 0.0000000 0.0000000 
NANA 0.5 0.0000000 0.0000000 0.0000000 0.0000000 
    1 0.0000000 0.1666667 0.1666667 0.0000000 
    2 0.0000000 0.0000000 0.0000000 0.0000000 
    4 0.0000000 0.0000000 0.0000000 0.0000000 
TANA 0.5 0.0000000 0.0000000 0.0000000 0.0000000 
    1 0.0000000 0.0000000 0.0000000 0.1666667 
    2 0.0000000 0.0000000 0.0000000 0.0000000 
    4 0.1666667 0.0000000 0.0000000 0.0000000 
TATA 0.5 0.1666667 0.0000000 0.0000000 0.0000000 
    1 0.0000000 0.0000000 0.0000000 0.0000000 
    2 0.0000000 0.0000000 0.0000000 0.0000000 
    4 0.0000000 0.0000000 0.0000000 0.0000000