2013-12-03 2 views
3

Как я могу группировать график плотности и плотность каждой суммы группы равна единице при использовании взвешенных данных?Плотность каждой группы взвешенных значений геомассы равна одному

ggplot2 help for geom_density() предлагает взломать для использования взвешенные данные: деление на сумму весов. Но при группировке это означает, что общая плотность групп составляет одну. Я хотел бы, чтобы плотность каждой группы была общей.

Я нашел два неуклюжих способа сделать это. Во-первых, чтобы рассматривать каждую группу как отдельный набор данных:

m <- ggplot() 
m + geom_density(data = movies[movies$Action == 0, ], aes(rating, weight = votes/sum(votes)), fill=NA, colour="black") + 
    geom_density(data = movies[movies$Action == 1, ], aes(rating, weight = votes/sum(votes)), fill=NA, colour="blue") 

Очевидные недостатки ручной обработки уровней факторов и эстетики. Я также попытался с помощью функции кадрирования из data.table пакета, чтобы создать новый столбец для общего количества голосов, приходящихся действий группы, разделив тем, что вместо того, чтобы:

movies.dt <- data.table(movies) 
setkey(movies.dt, Action) 
movies.dt[, votes.per.group := sum(votes), Action] 
m <- ggplot(movies.dt, aes(x=rating, weight=votes/votes.per.group, group = Action, colour = Action)) 
m + geom_density(fill=NA) 

Есть аккуратнее способы сделать это? Из-за размера моих таблиц я бы предпочел не реплицировать строки их взвешиванием ради использования частоты.

ответ

1

Я думаю, что вспомогательный стол может быть вашим единственным вариантом. У меня была аналогичная проблема here. Проблема заключается в том, что когда ggplot использует агрегирующие функции в aes(...), он применяет их ко всему набору данных, а не к подмножеству данных. Поэтому, когда вы пишете

aes(weight=votes/sum(votes)) 

в votes в числителе subsetted на основе Action, но голоса в знаменателе, sum(votes), не является. То же самое верно для неявной группировки с фасетками.

Если у кого-то есть способ обойти это, я бы хотел его услышать.

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