Преобразование двух категориальных переменных в сводные данные о пропорциях

В R,

Какой самый эффективный способ перейти от:

   gender soda
1       f    y
2       f    y
3       f    n
4       m    n
5       f    y
6       m    n
7       m    n
8       f    y
9       m    y
10      m    n

в

         y   n
m       0.2 0.8
f       0.8 0.2

Я использую следующую команду:

> tmp<-ddply(subdata,.(gender), summarise, y=length(soda[soda=="y"])/length(soda),n=length(soda[soda=="n"])/length(soda))
> rownames(tmp)<-tmp$gender
> tmp$gender<-NULL
> tmp
    y   n
f 0.8 0.2
m 0.2 0.8

Но я чувствую, что должно быть более идиоматическое выражение, о котором я не знаю. Есть?

1 ответ

Решение

Ты можешь использовать table а также prop.table:

> prop.table(table(subdata), 2)

      soda
gender   n   y
     f 0.2 0.8
     m 0.8 0.2

Функция table считает значения за комбинацию. prop.table вычисляет относительные частоты вдоль второго поля (т.е. 2: столбцы).

Другие вопросы по тегам