2012-06-26 2 views
2

так что это простой вопрос, и мне непонятно, что происходит с этим вызовом plyr.prop.table в вызове ddply

library(plyr) 

некоторые глупые данные с биномиальным исходом (y1) и двух факторов, классифицирующих четыре уровня (x1 и x2):

df <- data.frame(x1 = sample(letters[1:4], 4000,T), 
       x2 = sample(LETTERS[5:8], 4000,T), 
       y1 = rbinom(n=4000,1,.5)) 

Я хочу таблицу с рядами пропорций каждого outcome-- и я думал, что следующий будет работать

foo <- ddply(df, .(x1,x2), function(i) prop.table(table(i$y1),1)) 

, но вместо этого он дает мне:

head(foo) 

    x1 x2 0 1 
1 a E 1 1 
2 a F 1 1 
3 a G 1 1 
4 a H 1 1 
5 b E 1 1 
6 b F 1 1 

, который явно не является тем, что я ищу. Каково мое упущение?

ответ

4

попробовать

foo<-ddply(df, .(x1,x2), function(i) prop.table(table(i$y1))) 

> head(foo) 
    x1 x2   0   1 
1 a E 0.5365854 0.4634146 
2 a F 0.4936170 0.5063830 
3 a G 0.5176471 0.4823529 
4 a H 0.4568966 0.5431034 
5 b E 0.4780702 0.5219298 
6 b F 0.5617530 0.4382470 

не уверен, если то, что вы хотите

+3

@tomw +1 Я считаю, что это происходит, что выход из 'table' одномерно, а при указании маржу в' prop.table' вы вынуждаете R рассматривать эту одномерную таблицу как 2D-таблицу. – joran

+2

Если вам нужны данные в «длинном» формате 'ddply (df,. (X1, x2), суммировать, prop = prop.table (таблица (y1)), id = names (table (y1)))' – mnel

+0

ok ... Я пытаюсь ответить на этот вопрос. Во всяком случае, это именно то, что я искал. – tomw

Смежные вопросы