1. 程式人生 > >◮ R語言筆記(七): 利用Apply()函式在二維資料行、列上進行統計

◮ R語言筆記(七): 利用Apply()函式在二維資料行、列上進行統計

這裡的二維資料可以是矩陣的形式也可以是資料框的形式,

通過apply()函式的正確使用,可以在二位資料的行、列上進行自己想要的操作:

例如:

每一列/每一行的資料之和sum、中位數median、均值mean和方差var等;

 

****************************************************************************************************************************************

 

★Apply() 函式:

  *首先給出相應的使用程式碼:

> x1 = c(12,45,78,89,56,23,15,48,75,42)
> x2 = c(23,56,89,48,59,26,15,48,78,99)
> x3 = c(56,78,55,66,44,22,11,33,10,58)
> cbind(x1,x2,x3)    #首先組成二維陣列
      x1 x2 x3
 [1,] 12 23 56
 [2,] 45 56 78
 [3,] 78 89 55
 [4,] 89 48 66
 [5,] 56 59 44
 [6,] 23 26 22
 [7,] 15 15 11
 [8,] 48 48 33
 [9,] 75 78 10
[10,] 42 99 58

> x = cbind(x1,x2,x3)    #將二維陣列複製給x

> apply(x,2,max)
x1 x2 x3 
89 99 78 
> apply(x,2,sum)
 x1  x2  x3 
483 541 433 
> apply(x,2,min)
x1 x2 x3 
12 15 10 
> apply(x,2,mean)
  x1   x2   x3 
48.3 54.1 43.3 
> apply(x,2,median)
  x1   x2   x3 
46.5 52.0 49.5 
> apply(x,2,sd)
      x1       x2       x3 
26.72514 28.27032 23.44284 
> apply(x,2,var)
      x1       x2       x3 
714.2333 799.2111 549.5667 
> apply(x,2,prod)
          x1           x2           x3 
1.095058e+16 4.692829e+16 3.231463e+15 
> apply(x,1,max)
 [1] 56 78 89 89 59 26 15 48 78 99

> apply(x,1,min)
 [1] 12 45 55 48 44 22 11 33 10 42
> apply(x,1,sum)
 [1]  91 179 222 203 159  71  41 129 163 199

 ★apply()函式分析:

    > apply(x,2,max)

       其中包含了三個引數,第一個引數是指定相應的二維陣列;

       第二個引數如果是1就代表在行的方向上進行統計,如果是2就代表在列的方向上進行統計;

       第三個引數指出需要對資料進行操作的函式。

 

 

★利用which函式對Apply() 函式產生的資料的定位與查詢:

> x
      x1 x2 x3
 [1,] 12 23 56
 [2,] 45 56 78
 [3,] 78 89 55
 [4,] 89 48 66
 [5,] 56 59 44
 [6,] 23 26 22
 [7,] 15 15 11
 [8,] 48 48 33
 [9,] 75 78 10
[10,] 42 99 58

> apply(x,1,sum)
 [1]  91 179 222 203 159  71  41 129 163 199

> which.max(apply(x,1,sum))
[1] 3

> x$x1[which.max(apply(x,1,sum))]   
Error in x$x1 : $ operator is invalid for atomic vectors
 #這裡網上說可以使用,但是這裡為什麼不能使用呢??沒搞懂~
 #但是可以直接使用下面的語句也可以達到相應的效果

> x[which.max(apply(x,1,sum))]
[1] 78
> x2[which.max(apply(x,1,sum))]
[1] 89
> x3[which.max(apply(x,1,sum))]
[1] 55

 

 

 

 

****************************************************************************************************************************************

 

             最快的腳步不是跨越,而是繼續,最慢的步伐不是小步,而是徘徊。
 

****************************************************************************************************************************************