Gęstość każdej grupy ważonej sumy geom_density do jednej

W jaki sposób mogę pogrupować wykres gęstości i mieć gęstość każdej sumy grupowej w jednej, używając danych ważonych?

Theggplot2 pomoc dlageom_density() sugeruje włamanie do używania danych ważonych: dzielenie przez sumę wag. Ale po zgrupowaniu oznacza to, że łączna gęstość grup wynosi jeden. Chciałbym, aby gęstość każdej grupy była całkowita.

Znalazłem dwa niezgrabne sposoby, aby to zrobić. Pierwszym jest traktowanie każdej grupy jako oddzielnego zestawu danych:

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")

Oczywiste wady to ręczna obsługa poziomów czynników i estetyki. Próbowałem również użyć funkcji okienkowaniadata.table pakiet, aby utworzyć nową kolumnę dla całkowitej liczby głosów na grupę akcji, dzieląc przez to:

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)

Czy istnieją lepsze sposoby, aby to zrobić? Ze względu na rozmiar moich tabel wolę nie replikować wierszy przez ich ważenie ze względu na częstotliwość.

questionAnswers(1)

yourAnswerToTheQuestion