Многогрупповая гистограмма с групповыми частотами

Во-первых, я уже прочитал следующий поток: ggplot2 — многогрупповая гистограмма с пропорциями внутри группы, а не частотой

Я последовал предложению ddply, и, похоже, это не сработало для моих данных. Логически код должен отлично работать с моим набором данных, и я понятия не имею, что я делаю неправильно.

В целом: я хотел бы сделать гистограмму (я изучаю ggplot), которая отображает частоту генотипа в каждой из моих учебных групп.

Что-то вроде этого:

введите здесь описание изображения

Вот фиктивный набор данных, который отражает мой собственный:

df<-data.frame(ID=1:60,
               Genotypes=sample(c("CG", "CC", "GG"), 60, replace=T),
               Study_Group=sample(c("Control", "Pathology1", "pathology2"), 60, replace=T))

Я пробовал варианты p + geom_bar(aes(aes(y = ..count../sum(..count..)), но r возвращает «не удается найти объект« count »» или что-то в этом роде.

Я также пробовал:

df.new<-ddply(df,.(Study_Group),summarise,
              prop=prop.table(table(df$Genotype)),
              Genotype=names(table(df$Genotype)))`

И я считаю, что произошла ошибка с функцией суммирования, но, честно говоря, я понятия не имею, что делаю.

Является ли проблема просто моим пониманием решения или это что-то существенно отличающееся от моего набора данных?

Спасибо за помощь.


person dejonggr    schedule 08.12.2016    source источник


Ответы (1)


Попробуйте это. В этом я использую dplyr, который представляет собой пакет, содержащий обновленные версии функций типа ddply из plyr. Одна вещь, я не уверен, хотите ли вы, чтобы ваша ось X была Study_Groups или вашей Genotypes. в вашем вопросе говорится, что вам нужна частота Genotype в каждой группе, но на вашем графике есть Genotypes на x. Решение следует заявленному желанию, а не сюжету. Однако внести изменение, чтобы получить Genotype на x, просто. Я отмечу в комментариях к коду, где и какие изменения нужно внести.

library(dplyr)
library(ggplot2)

df2 <- df %>%
  count(Study_Group, Genotypes) %>%
  group_by(Study_Group) %>% #change to `group_by(Genotypes) %>%` for alternative approach
  mutate(prop = n / sum(n))

ggplot(data = df2, aes(Study_Group, prop, fill = Genotypes)) + 
  geom_bar(stat = "identity", position = "dodge")

введите здесь описание изображения

person Nick Criswell    schedule 08.12.2016
comment
Спасибо! Это сработало отлично! Я определенно собираюсь больше читать о dyplr, это было очень полезно. - person dejonggr; 08.12.2016