我处理大量数据(n = 2057),并且数据框如下所示:
id_num Gender Protein_Milk Protein_Cheese
1 2345 1 4.5 3.4
2 45983 2 5.6 5.2
. . . . .
. . . . .
. . . . .
2057 13454 1 2.6 8.5
我想创建一个绘制栏,在x轴上并排排列着Protein_Milk和Protein_Cheese列,并按性别分组。 Y轴显示蛋白质(g)的平均值。 问题是,我无法创建具有两个列的barplot。因此,每列(Protein_Milk / Protein_Cheese)有2个不同的条形图。
我的R命令:
Data_Frame$Gemder<-factor(Data_Frame$Gender, levels = c(1,2), labels = c("Men", "Women"))
Barplot<-ggplot(Data_Frame, aes(Gender, Protein_Milk))
Barplot +
stat_summary(fun.y = mean, geom = "bar")+
stat_summary(fun.data = mean_cl_normal, geom = "errorbar")
有人有什么建议吗? 预先感谢
编辑: 由于我的数据很大,因此无法在此处使用解决方案:
Creating grouped bar-plot of multi-column data in R
我需要找到一种方法来创建具有两列的条形图,而无需在 c()或 read.table(text =“”)中写入所有条目每列2057个条目将花费很长时间。
答案 0 :(得分:0)
仍不能完全确定所需的输出类型,但这是一个示例。主要问题是您的数据为长格式,并且需要为高格式。有关更多信息,请查看:http://r4ds.had.co.nz/tidy-data.html。
这是我的解决方案,该解决方案使用多面包装将每个性别的图表并排放置。为了简单起见,我正在制作一些虚拟数据。
library(tidyverse)
data <- tibble(id = c(1:4),
gender = c(1, 2, 1, 2),
protein_cheese = c(4, 5, 6, 7),
protein_milk = c(6, 7, 8, 9)
)
data %>%
gather(key = type,
value = protein,
protein_cheese:protein_milk) %>%
ggplot(aes(x = type, y = protein)) +
geom_col() +
facet_wrap( ~ gender)