函數(shù)的用途
base包中sweep()函數(shù)是處理統(tǒng)計(jì)量的工具。所以一般結(jié)合apply()函數(shù)來(lái)使用,一般我們需要將apply()統(tǒng)計(jì)出來(lái)的統(tǒng)計(jì)量要代回原數(shù)據(jù)集去對(duì)應(yīng)操作的時(shí)候就需要用到sweep()。
掃除、清除也是sweep單詞的本義。
函數(shù)的參數(shù)
sweep(x, MARGIN, STATS, FUN = "-", check.margin = TRUE, ...)
- x:即要處理的原數(shù)據(jù)集
- MARGIN:對(duì)行或列,或者數(shù)列的其他維度進(jìn)行操作
- STATS:需要對(duì)原數(shù)據(jù)集操作用到的統(tǒng)計(jì)量
- FUN:操作需要用到的四則運(yùn)算,默認(rèn)為減法"-",當(dāng)然可以修改成"+","*","/"即加、乘、除
- check.margin:是否需要檢查維度是否適宜的問(wèn)題,默認(rèn)為TRUE。
- ……
實(shí)例分析
1、比如我們需要將原數(shù)據(jù)集所有數(shù)據(jù)都減去各列的平均數(shù),所以我們需要用apply()計(jì)算出每列的平均數(shù),然后用sweep()完成。
require(stats) # for mean
head(attitude, 10)
## rating complaints privileges learning raises critical advance
## 1 43 51 30 39 61 92 45
## 2 63 64 51 54 63 73 47
## 3 71 70 68 69 76 86 48
## 4 61 63 45 47 54 84 35
## 5 81 78 56 66 71 83 47
## 6 43 55 49 44 54 49 34
## 7 58 67 42 56 66 68 35
## 8 71 75 50 55 70 66 41
## 9 72 82 72 67 71 83 31
## 10 67 61 45 47 62 80 41
mean.att <- apply(attitude, 2, mean)
mean.att
## rating complaints privileges learning raises critical
## 64.63 66.60 53.13 56.37 64.63 74.77
## advance
## 42.93
所有數(shù)據(jù)都減去各列的平均數(shù)
head(sweep(data.matrix(attitude), 2, mean.att, FUN = "-"), 10)
## rating complaints privileges learning raises critical advance
## [1,] -21.633 -15.6 -23.133 -17.3667 -3.633 17.233 2.067
## [2,] -1.633 -2.6 -2.133 -2.3667 -1.633 -1.767 4.067
## [3,] 6.367 3.4 14.867 12.6333 11.367 11.233 5.067
## [4,] -3.633 -3.6 -8.133 -9.3667 -10.633 9.233 -7.933
## [5,] 16.367 11.4 2.867 9.6333 6.367 8.233 4.067
## [6,] -21.633 -11.6 -4.133 -12.3667 -10.633 -25.767 -8.933
## [7,] -6.633 0.4 -11.133 -0.3667 1.367 -6.767 -7.933
## [8,] 6.367 8.4 -3.133 -1.3667 5.367 -8.767 -1.933
## [9,] 7.367 15.4 18.867 10.6333 6.367 8.233 -11.933
## [10,] 2.367 -5.6 -8.133 -9.3667 -2.633 5.233 -1.933
sweep函數(shù)和apply函數(shù)相似,但是sweep主要用于array的一些分類計(jì)算,而apply更多的是矩陣計(jì)算,data.frame也行。array是高于2維的數(shù)據(jù)