2016-05-06 4 views
0

Я пытаюсь создать сводную таблицу из следующих данных:Создать пропорциональную сводную таблицу с несколькими переменными в 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 

Я хочу, чтобы пропорции NOFO за каждое расстояние и ID.

Я попытался с помощью Ftable, dcast и tapply функции, и я в состоянии сделать это для NOFO ~ Расстояние:

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

Пример результата:

 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 

Но у меня нет смог найти решение для NOFO ~ Distance + ID, так что каждая пропорция расстояния разделена на ID.

+0

вы можете разместить свой код для 'NOFO ~ Distance' который работал? – Sotos

+0

Вам нужна 'prop.table (acast (df1, NOFO ~ Расстояние + ID, значение.var =" NOFO ", длина))' – akrun

ответ

0

Просто добавьте ID в качестве третьей переменной.

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 

или, если вы предпочитаете плоскую таблицу

> 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 
Смежные вопросы