1. 程式人生 > >R 語言的分組統計

R 語言的分組統計

分組計算描述性統計量

1.使用aggregate()分組獲取描述性統計量。

aggregate(data,by=list(v1,v2),mean)這裡的分組是用list()來區分。但這個有弊端,只能是單返回值函式。像mean,sd.

2.使用by() 分組計算描述性統計量。(不知道怎麼都執行報錯!!)

語法 by(data,indices,fun)其中data是一個數據框或矩陣。這裡fun可以是多返回值函式。

data是一個數據框,indices 是一個因子或因子組成的列表。fun 可以是自己定義的函式。

例:

dstats<-function(x)(c(mean=mean(x),sd=sd(x)))

by(mtcars[vars],mtcars$am,dstats)

3.使用doBy包中的summaryBy() 分組計算概述統計量。

library(doBy)

summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats) 其中FUN為自定義的函式。

> summaryBy(mpg+hp~am,data=mtcars,FUN=fun1)
  am mpg.mean mpg.sd hp.mean hp.sd
1  0       17    3.8     160    54
2  1       24    6.2     127    84

4.reshape包中的函式。melt ,cast

dstats<-function(x)(c(n=length(x),mean=mean(x),sd=sd(x)))

dfm<-melt(mtcars,measure.vars = c("mpg","hp","wt"),id.vars=c("am","cyl"))

dcast(sfm, am+ cyl+ variable ~ .,dstats)

Error in dim(ordered) <- ns : 
  dims [product 18] do not match the length of object [54]

主要原因是:dcast() 裡面的函式必須是返回單一值的函式,此處定義的是多個值的,因此報錯,如果改成單個函式。

> dcast(sfm, am+ cyl+ variable ~ .,mean)
   am cyl variable          .
1   0   4      mpg  22.900000
2   0   4       hp  84.666667
3   0   4       wt   2.935000
4   0   6      mpg  19.125000
5   0   6       hp 115.250000
6   0   6       wt   3.388750
7   0   8      mpg  15.050000
8   0   8       hp 194.166667
9   0   8       wt   4.104083
10  1   4      mpg  28.075000
11  1   4       hp  81.875000
12  1   4       wt   2.042250
13  1   6      mpg  20.566667
14  1   6       hp 131.666667
15  1   6       wt   2.755000
16  1   8      mpg  15.400000
17  1   8       hp 299.500000
18  1   8       wt   3.370000