Szukam porady na temat lepszych sposobów obliczania proporcji obserwacji w różnych kategoriach.Grafy ggplot proporcji obserwacji w kategoriach
Mam dataframe, który wygląda mniej więcej tak:
cat1 <- c("high", "low", "high", "high", "high", "low", "low", "low", "high", "low", "low")
cat2 <- c("1-young", "3-old", "2-middle-aged", "3-old", "2-middle-aged", "2-middle-aged", "1-young", "1-young", "3-old", "3-old", "1-young")
df <- as.data.frame(cbind(cat1, cat2))
Na przykład tutaj, chcę wykreślić część każdej grupie wiekowej które mają wartość „wysoki”, a odsetek każdej grupy wiekowej, które mają wartość "niska". Bardziej ogólnie, chcę wykreślić, dla każdej wartości kategorii 2, procent obserwacji, które mieszczą się na każdym z poziomów kategorii 1.
Poniższy kod daje właściwy wynik, ale tylko poprzez ręczne zliczanie i dzielenie przed spiskiem. Czy istnieje dobry sposób na wykonanie tego w locie w ggplot?
library(plyr)
count1 <- count(df, vars=c("cat1", "cat2"))
count2 <- count(df, "cat2")
count1$totals <- count2$freq
count1$pct <- count1$freq/count1$totals
ggplot(data = count1, aes(x=cat2, y=pct))+
facet_wrap(~cat1)+
geom_bar()
This previous stackoverflow question oferuje coś podobnego, z następującego kodu:
ggplot(mydataf, aes(x = foo)) +
geom_bar(aes(y = (..count..)/sum(..count..)))
Ale nie chcę „suma (.. liczyć ..)” - co daje sumę zliczania wszystkich pojemniki - w mianowniku; raczej chcę sumę wartości każdej z kategorii "cat2". Przestudiowałem również dokumentację stat_bin.
Byłbym wdzięczny za wszelkie wskazówki i sugestie, jak to zrobić.
Oprócz odpowiedzi udzielę ci również odpowiedzi [this] (http://stackoverflow.com/a/10888762/324364), która może być przydatna. (Należy jednak pamiętać, że takie hacki mogą nie przetrwać, ponieważ ggplot zostanie zaktualizowany do kolejnych wersji.) – joran
Ponieważ nie jest to typowe podsumowanie danych, nie ma prostej składni, aby zrobić to w ggplot. Twoje najlepsze podejście polega na wstępnym podsumowaniu danych, tak jak to zrobiłeś. –