R语言 分组条形图,其中SD条来自ggplot2的两个不同组

ejk8hzay  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(160)

我几乎可以肯定我把这件事搞得太复杂了,但是我没有太多使用ggplot2的经验,所以任何建议都是受欢迎的!
我有一个大型数据集,其中包含男性和女性对3种刺激类型的4个变量的React。我使用聚合来计算性别对每个变量的每种刺激React的平均值和SD。示例如下所示。

dffull
Individual  Sex     var1    var2    var3    var4   stimulustype
       A    Male     10       1       4      6          A
       B    Male     3        9       9     10          A
       C    Female   9        10      7      9          A
       D    Female   8        5       2      5          A
       A    Male     1        3       1      7          B
       B    Male     9        5       2      3          B
       C    Female   8        1       2      4          B
       D    Female   8        4       4     10          B
       A    Male     1        8       2      7          C
       B    Male     1       10       6      3          C
       C    Female   8        1       5      2          C
       D    Female   8        7       5      8          C
#splitting main df into Male and Female

femaledf <-dffull[dffull$Sex=="Female",]
maledf <-dffull[dffull$Sex=="Male",]
mstim <- maledf$stimulustype
fstim <- femaledf$stimulustype

malemeans <- aggregate(cbind(var1, var2, var3, var4)~mstim, FUN=mean, na.rm=TRUE, na.action=NULL)
malesd <- aggregate(cbind(var1,var2,var3,var4)~mstim, FUN=sd, na.rm=TRUE, na.action=NULL)
femalemeans <- aggregate(cbind(var1, var2, var3, var4)~fstim, FUN=mean, na.rm=TRUE, na.action=NULL)
femalesd <- aggregate(cbind(var1,var2,var3,var4)~fstim, FUN=sd, na.rm=TRUE, na.action=NULL)

我想用SD作为误差线,一次画出男性和女性对每个刺激的React。
将df分为男性和女性是错误的吗?如果是,我如何计算每种性别的组特异性平均值和SD?或者我应该尝试按性别合并汇总结果吗?
编辑:我希望在x轴上有刺激类型,每种类型对应一个性别,每种性别对应一个变量。在下面的例子中,我希望用男性和女性代替基因1/2,用模拟A或B代替物种A/B。

eqqqjvef

eqqqjvef1#

如果你在绘图前将数据重新调整为“整洁”的格式,并使用dplyr进行汇总,这样的事情会更容易。

library(dplyr)
library(tidyr)
library(ggplot2)

dffull %>% 
  pivot_longer(Var1:Var4, names_to="Variable", values_to="Val") %>% 
  group_by(stimulustype, Variable, Sex) %>% 
  summarise(mean=mean(Val, na.rm=TRUE), sd=sd(Val, na.rm=TRUE)) %>% 
  ggplot() + 
  aes(Variable, mean, fill=Sex, group=Sex) +
  geom_col(position="dodge") + 
  geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), position="dodge") + 
  facet_grid(col=vars(stimulustype))

这将返回以下图

相关问题