How to get a barplot with several variables side by side grouped by a factor

前端 未结 3 1804
日久生厌
日久生厌 2020-11-29 00:26

I have a dataset which looks like this one below. I am trying to make a barplot with the grouping variable gender, with all the variables side by side on the x axis (grouped

3条回答
  •  悲哀的现实
    2020-11-29 00:49

    You can use aggregate to calculate the means:

    means<-aggregate(df,by=list(df$gender),mean)
    Group.1      tea     coke     beer    water gender
    1       1 87.70171 27.24834 24.27099 37.24007      1
    2       2 24.73330 25.27344 25.64657 24.34669      2
    

    Get rid of the Group.1 column

    means<-means[,2:length(means)]
    

    Then you have reformat the data to be in long format:

    library(reshape2)
    means.long<-melt(means,id.vars="gender")
      gender variable    value
    1      1      tea 87.70171
    2      2      tea 24.73330
    3      1     coke 27.24834
    4      2     coke 25.27344
    5      1     beer 24.27099
    6      2     beer 25.64657
    7      1    water 37.24007
    8      2    water 24.34669
    

    Finally, you can use ggplot2 to create your plot:

    library(ggplot2)
    ggplot(means.long,aes(x=variable,y=value,fill=factor(gender)))+
      geom_bar(stat="identity",position="dodge")+
      scale_fill_discrete(name="Gender",
                          breaks=c(1, 2),
                          labels=c("Male", "Female"))+
      xlab("Beverage")+ylab("Mean Percentage")
    

    enter image description here

提交回复
热议问题