如何在R中“堆叠”和“取消堆叠”,用于包含2个因子的汇总统计

时间:2014-08-16 17:03:36

标签: r ggplot2 reshape2

我正在尝试从以下数据集中计算两个汇总统计信息(平均值和标准误差),其中Location和Adult都应该是因子。

 Location    Adult    OverComp
 F           1        7
 P           1        8
 P           0        10
 F           1        3
 F           0        11

我希望输出显示如下:

Location    Adult     OverComp.m    OverComp.se
F           1         (mean)        (standard error)
F           0         (mean)        (standard error)
P           1         (mean)        (standard error)
P           0         (mean)        (standard error)

其中OverComp.m是Location x Adult的每个组合的计算平均值,而OverComp.se是每个组合的标准误差。我想要这种格式,因为我想在ggplot2中使用它,制作四种方法的条形图。 se,用位置颜色编码。

我已经走到这一步了:

 summary.OverComp <-data.frame(
 + Location=levels(as.factor(data$FLocation)),
 + MeanOverComp=tapply(data$OverComp, list(data$FLocation,data$Adult), mean),
 + se=tapply(data$OverComp, list(data$FLocation,data$Adult),std.error))

哪个产生我想要的统计数据,但不是我在ggplot2中绘制所需的格式(据我所知):

summary.OverComp
       Location   MeanOverComp.0 MeanOverComp.1   se.0      se.1
 F     Fiji       7.238095       8.454545         0.3792062 0.3023071
 P     Peru       6.893617       5.395833         0.4544304 0.3076155

我现在有点无能为力 - 不确定是否要采用不同的绘图方法,或者转换为上述输出,或者想出如何将Adult作为我的摘要编码中的一个因素。我有一个暗示reshape2可能涉及,但不知道如何处理。非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以尝试data.table(如果dat是数据集)

 library(plotrix)
 library(data.table)

 setDT(dat)[,list(OverComp.m=mean(OverComp),
                Overcomp.se=std.error(OverComp)), by=list(Location, Adult)]
     Location Adult OverComp.m Overcomp.se
 #1:        F     1          5           2
 #2:        P     1          8          NA
 #3:        P     0         10          NA
 #4:        F     0         11          NA

答案 1 :(得分:0)

这是aggregate的一个典型用途,一个基础(实际上是stats-pkg)函数:

> aggregate(dat$OverComp, # the values being aggregated
            dat[-3],   # the grouping factors
            function(Ov) c(mean=mean(Ov), sd=sd(Ov) ) #aggregation function(s)
            )  
  Location Adult    x.mean      x.sd
1        F     0 11.000000        NA
2        P     0 10.000000        NA
3        F     1  5.000000  2.828427
4        P     1  8.000000        NA

如果你看到NA的三个类别中有多个项目,则会产生更有吸引力的输出。