Сгруппированная гистограмма суммированных средних с Ggplot2

Я чувствую, что мне не хватает чего-то очень простого, но любые советы приветствуются.

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

Sex    Low Freq      High Freq      Bandwidth
M       3000         4011           1011
M       3000         3600           600 
M       2790         4237           1447
F       2700         3300           500
F       2900         4517           617
F       2813         3857           1044

Я пытался:

ggplot(TripleSongAverages, aes(x=factor(Sex), y='Low Freq', 'High Freq', 'Bandwidth')) + stat_summary(fun.y="mean", geom="bar") 

Но это только создает график с первой переменной.


person michellemoyah    schedule 01.09.2020    source источник


Ответы (1)


Я бы предложил использовать подход tidyverse для изменения формы данных и вычисления средних значений. Вот код:

library(tidyverse)
#Data
df <- structure(list(Sex = c("M", "M", "M", "F", "F", "F"), Low.Freq = c(3000, 
3000, 2790, 2700, 2900, 2813), High.Freq = c(4011, 3600, 4237, 
3300, 4517, 3857), Bandwidth = c(1011, 600, 1447, 500, 617, 1044
)), class = "data.frame", row.names = c(NA, -6L))

Код:

#Reshape data and plot
df %>% pivot_longer(cols = -Sex) %>%
  group_by(Sex,name) %>%
  summarise(Mean=mean(value,na.rm=T)) %>%
  #Plot
  ggplot(aes(x=factor(Sex), y=Mean,fill=name)) +
  geom_bar(stat='identity',position = position_dodge(0.9)) 

Выход:

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

person Duck    schedule 01.09.2020
comment
Спасибо за вашу помощь! По какой-то причине мой df включает только первые 6 строк (у меня 41). Я получил следующие сообщения об ошибках: Ошибка: невозможно создать подмножество несуществующих столбцов. x Столбцы F, F, F, F, F и т. д. не существуют. - person michellemoyah; 01.09.2020
comment
Предупреждающее сообщение: в format.data.frame(if (опустить) x[seq_len(n0), , drop = FALSE] else x, : поврежденный фрейм данных: столбцы будут усечены или дополнены NA - person michellemoyah; 01.09.2020
comment
@michellemoyah Вместо df используйте все свои данные, здесь всего шесть строк, потому что это пример. Просто будьте осторожны с выбранными столбцами. - person Duck; 01.09.2020