您的位置:首页 > 其它

分组计算描述性统计量

2017-11-06 00:00 78 查看
aggregate()

它首先将数据进行分组(按行),然后对每一组数据进行函数统计,最后把结果组合成一个比较nice的表格返回。根据数据对象不同它有三种用法,分别应用于数据框(data.frame)、公式(formula)和时间序列(ts)

aggregate(x, by, FUN, ..., simplify = TRUE)

aggregate(formula, data, FUN, ..., subset, na.action = na.omit)

aggregate(x, nfrequency = 1, FUN = sum, ndeltat = 1, ts.eps = getOption("ts.eps"), ...)

> str(mtcars) #不同类型汽车道路测试的数据框类型数据:
'data.frame':	32 obs. of  11 variables:
$ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
$ disp: num  160 160 108 258 360 ...
$ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
$ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num  16.5 17 18.6 19.4 17 ...
$ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
$ am  : num  1 1 1 0 0 0 0 0 0 0 ...
$ gear: num  4 4 4 3 3 3 3 4 4 4 ...
$ carb: num  4 4 1 1 2 1 4 2 2 4 ...

> attach(mtcars)
The following objects are masked from mtcars (pos = 3):

am, carb, cyl, disp, drat, gear, hp, mpg, qsec, vs, wt

> aggregate(mtcars,by=list(cyl),FUN=mean)#按cyl(汽缸数)进行分类,计算每类均值
Group.1      mpg cyl     disp        hp     drat       wt     qsec        vs
1       4 26.66364   4 105.1364  82.63636 4.070909 2.285727 19.13727 0.9090909
2       6 19.74286   6 183.3143 122.28571 3.585714 3.117143 17.97714 0.5714286
3       8 15.10000   8 353.1000 209.21429 3.229286 3.999214 16.77214 0.0000000
am     gear     carb
1 0.7272727 4.090909 1.545455
2 0.4285714 3.857143 3.428571
3 0.1428571 3.285714 3.500000

#by参数也可以包含多个类型的因子,得到的就是每个不同因子组合的统计
> aggregate(mtcars, by=list(cyl, gear), FUN=mean)
Group.1 Group.2    mpg cyl     disp       hp     drat       wt    qsec  vs   am
1       4       3 21.500   4 120.1000  97.0000 3.700000 2.465000 20.0100 1.0 0.00
2       6       3 19.750   6 241.5000 107.5000 2.920000 3.337500 19.8300 1.0 0.00
3       8       3 15.050   8 357.6167 194.1667 3.120833 4.104083 17.1425 0.0 0.00
4       4       4 26.925   4 102.6250  76.0000 4.110000 2.378125 19.6125 1.0 0.75
5       6       4 19.750   6 163.8000 116.5000 3.910000 3.093750 17.6700 0.5 0.50
6       4       5 28.200   4 107.7000 102.0000 4.100000 1.826500 16.8000 0.5 1.00
7       6       5 19.700   6 145.0000 175.0000 3.620000 2.770000 15.5000 0.0 1.00
8       8       5 15.400   8 326.0000 299.5000 3.880000 3.370000 14.5500 0.0 1.00
gear     carb
1    3 1.000000
2    3 1.000000
3    3 3.083333
4    4 1.500000
5    4 4.000000
6    5 2.000000
7    5 6.000000
8    5 6.000000

#cbind(mpg,hp) ~ cyl+gear 表示使用 cyl 和 gear 的因子组合对 cbind(mpg,hp) 数据进行操作
> aggregate(cbind(mpg,hp) ~ cyl+gear, FUN=mean)
cyl gear    mpg       hp
1   4    3 21.500  97.0000
2   6    3 19.750 107.5000
3   8    3 15.050 194.1667
4   4    4 26.925  76.0000
5   6    4 19.750 116.5000
6   4    5 28.200 102.0000
7   6    5 19.700 175.0000
8   8    5 15.400 299.5000


by()

aggregate()仅允许在每次调用时使用平均数、标准差这样的单返回值函数。无法一次返回若干统计量,要完成这任务可以使用 by() 函数

by(data, INDICES ,FUN)

data:一个数据框或矩阵

INDICES:是一个因子或因子组成的列表,定义了分组

FUN:是任意函数

分组计算的扩展

doBy包中的summary By(),其格式为

summaryBy(formula,data=frame,FUN=function)

formula:接收如下格式

var1+var2+var3+...+varN~groupvar1+groupvar2+...+groupvarN,在 ~ 左侧的变量是需要分析的数值型变量,而右侧的变量是类别型的分组变量

function:可以分为内建或用户自编的R函数

例:

> library(doBy)
Warning message:
程辑包‘doBy’是用R版本3.4.1 来建造的
> summaryBy(mpg+hp+wt~am, data=mtcars, FUN=mystats)
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
1  0    19 17.14737  3.833966 0.01395038   -0.8031783   19 160.2632 53.90820 -0.01422519  -1.2096973   19 3.768895 0.7774001
2  1    13 24.39231  6.166504 0.05256118   -1.4553520   13 126.8462 84.06232  1.35988586   0.5634635   13 2.411000 0.6169816
wt.skew wt.kurtosis
1 0.9759294   0.1415676
2 0.2103128  -1.1737358
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐