在比较多组个体或观测时,关注的焦点经常是各组的描述性统计信息,而不是样本整体的描
述性统计信息。同样地,在R中完成这个任务有若干种方法。我们将以获取变速箱类型各水平的
描述性统计量开始。
vars<- c("mpg","hp","wt")
> aggregate(mtcars[vars],by=list(am=mtcars$am),median)
am mpg hp wt
1 0 17.3 175 3.52
2 1 22.8 109 2.32
注意list(am=mtcars$am)的使用。如果使用的是list(mtcars$am),则am列将被标注为
Group.1而不是am。你使用这个赋值指定了一个更有帮助的列标签。如果有多个分组变量,可以
使用by=list(name1=groupvar1, name2=groupvar2, ... , groupvarN)这样的语句。
> aggregate(mtcars[vars],by=list(am=mtcars$am,gear=mtcars$gear),median)
am gear mpg hp wt
1 0 3 15.50 180.0 3.730
2 0 4 21.00 109.0 3.315
3 1 4 25.05 79.5 2.260
4 1 5 19.70 175.0 2.770
------------------------------------------------
doBy包和psych包也提供了分组计算描述性统计量的函数。同样地,它们未随基本安装发布,
必须在首次使用前进行安装。doBy包中summaryBy()函数的使用格式为
> summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mtstat)
am mpg.n mpg.mean mpg.stdev mpg.skew mpg.kurtosis hp.n hp.mean hp.stdev hp.skew hp.kurtosis wt.n wt.mean wt.stdev wt.skew wt.kurtosis
1 0 32 20.09062 6.026948 0.610655 -0.372766 32 146.6875 68.56287 0.7260237 -0.1355511 32 3.21725 0.9784574 0.4231465 -0.02271075
>
> describe.by(mtcars[vars],mtcars$am)
group: 0
vars n mean sd median trimmed mad min max range skew kurtosis se
mpg 1 32 20.09 6.03 19.20 19.70 5.41 10.40 33.90 23.50 0.61 -0.37 1.07
hp 2 32 146.69 68.56 123.00 141.19 77.10 52.00 335.00 283.00 0.73 -0.14 12.12
wt 3 32 3.22 0.98 3.33 3.15 0.77 1.51 5.42 3.91 0.42 -0.02 0.17
------------------------------------------------------------------------------
的reshape包灵活地按组导出描述性统计量
> dfs <- melt(mtcars,measure.vars=c("mpg","hp","wt"),id.vars=c("am","cyl"))
> cast(dfs,am+cyl+variable~.,dstats)
am cyl variable n mean sd
1 0 4 mpg 11 26.663636 4.5098277
2 0 4 hp 11 82.636364 20.9345300
3 0 4 wt 11 2.285727 0.5695637
4 0 6 mpg 7 19.742857 1.4535670
5 0 6 hp 7 122.285714 24.2604911
6 0 6 wt 7 3.117143 0.3563455
7 0 8 mpg 14 15.100000 2.5600481
8 0 8 hp 14 209.214286 50.9768855
9 0 8 wt 14 3.999214 0.7594047