2013-08-27 2 views
2

У меня есть опыт работы на две недели в R и по достоинству оценят вашу помощь.Расчет процента частот в R

У меня есть таблица данных, которая была построена с count(), и я хочу рассчитать процент частот по категориям. Так что, если это мой кадр данных:

name cat1 cat2 freq 
A  1 1 32 
A  1 0 56 
A  0 1 36 
A  0 0 25 
B  1 1 14 
B  1 0 68 
B  0 1 58 
B  0 0 90 

Я хочу, чтобы вычислить процент от имени и по cat1 (cat2 = 1,0 это всего). У меня есть несколько кадров данных, для некоторых имен это может быть только cat1 = 0 & cat2 = 0, и из-за разных структур я не могу сделать это просто.

Например, первая строка будет (32/(32 + 56)) * 100, четвертая (25/(25 + 36)) * 100.

Любые идеи?

Благодаря

+0

Не могли бы вы привести пример того, что вы имеете в виду от% freq по категориям? Спасибо – Mayou

+0

Добро пожаловать в SO. Не могли бы вы рассказать, что будет в знаменателе процента? – Metrics

ответ

10

Вы можете попробовать использовать data.table. Вы также получаете преимущество скорости при работе с большими таблицами.

library(data.table) 
#if your data is already stored as a data frame, 
#you can always skip the next step and continue with data <- data.table(data) 

data <- data.table(name=rep(c("A","B"), each=4), cat1=c(1,1,0,0,1,1,0,0), cat2=c(1,0,1,0,1,0,1,0), freq=c(32,56,36,25,14,68,58,90)) 
data[, percen := sum(freq), by=list(name,cat1)] 
data[, percen := freq/percen] 
data 
> data 
    name cat1 cat2 freq percen 
1: A 1 1 32 0.3636364 
2: A 1 0 56 0.6363636 
3: A 0 1 36 0.5901639 
4: A 0 0 25 0.4098361 
5: B 1 1 14 0.1707317 
6: B 1 0 68 0.8292683 
7: B 0 1 58 0.3918919 
8: B 0 0 90 0.6081081 

Надеюсь, это поможет.

+0

Очень полезно, спасибо! – user2721827

+1

рад распространять Евангелие data.table. Один из лучших инструментов, которые я нашел до сих пор. – user2627717

+1

+1 Позор, вопрос закрыт. И к дубликату, чей ответ «prop.table»? Поэтому мое повторное голосование. Если он будет закрыт как дубликат, то, безусловно, будет лучше! –

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