- R語言統計分析與應用
- 汪海波等
- 2559字
- 2020-05-26 17:10:52
2.2 R常用函數及其應用
R函數是一個子程序,它由0個或幾個自變量返回一個結果值。每個R函數都有一個關鍵名字。為了引用函數,要寫出它的名字,然后寫出一個自變量或幾個自變量,并用括號括起來,這個函數對這些自變量進行某種運算。R函數的形式為:
Functionname(variable1,variable2 ┉)
例如SUM(math,English,Chinese),SUM函數計算變量math、English和Chinese的和。又如MIN(X,Y),MIN函數比較兩個自變量的值并返回這兩個值的最小值。
本節我們將綜述R中作為數據處理基石的函數,它們可分為數值(數學、統計、概率)函數和字符處理函數。
2.2.1 數學函數
以下為常用的數學函數和簡短的用例。
·abs(x):絕對值。
> abs(-4) [1] 4
·sqrt(x):平方根。
> sqrt(25) [1] 5 > 25^(0.5) [1] 5
·ceiling(x):不小于x的最小整數。
> ceiling(3.475) [1] 4
·floor(x):不大于x的最大整數。
> floor(3.475) [1] 3
·trunc(x):向0的方向截取的x中的整數部分。
> trunc(5.99) [1] 5
·round(x, digits=n):將x舍入為指定位的小數。
> round(3.475, digits=2) [1] 3.48
·signif(x, digits=n):將x舍入為指定的有效數字位數。
> signif(3.475, digits=2) [1] 3.5
·cos(x):余弦。
> cos(2) [1] -0.4161468
·sin(x) :正弦。
> sin(2) [1] 0.9092974
·tan(x):正切。
> tan(2) [1] -2.18504
·acos(x):反余弦。
> acos(-0.416) [1] 1.999839
·asin(x):反正弦。
> asin(-0.416) [1] -0.4290422
·atan(x):反正切。
> atan(-0.416) [1] -0.3942229
·cosh(x):雙曲余弦。
> cosh(2) [1] 3.762196
·sinh(x):雙曲正弦。
> sinh(2) [1] 3.62686
·tanh(x):雙曲正切。
> tanh(2) [1] 0.9640276
·acosh(x):反雙曲余弦。
> acosh(2.0) [1] 1.316958
·asinh(x):反雙曲正弦。
> asinh(3.627) [1] 2.000037
·atanh(x):反雙曲正切。
> atanh(0.22) [1] 0.2236561
·log(x,base=n):對x取以n為底的對數。
> log(8,2) [1] 3
·log(x):自然對數。
> log(10) [1] 2.302585
·log10(x):常用對數。
> log10(40) [1] 1.60206 > log(40,10) [1] 1.60206
·exp(x):指數函數。
> exp(2) [1] 7.389056
對數據做變換是這些函數的一個主要用途。數學函數也被用作公式中的一部分,用于繪圖函數和在輸出結果之前對數值做格式化。
2.2.2 樣本統計函數
以下為常用的樣本函數和簡短的用例。
·mean(x):平均數。
> mean(c(1,2,3,4)) [1] 2.5
·median(x):中位數。
> median(c(1,2,3,4,5)) [1] 3
·sd(x):標準差。
> sd(c(1,2,3,4,5,6,7)) [1] 2.160247
·var(x):方差。
> var(c(1,2,3,4,5,6,7)) [1] 4.666667
·mad(x):絕對中位差。
> mad(c(1,2,3,4,5,6,7)) [1] 2.9652
·quantile(x,probs):求分位數。其中x為待求分位數的數值型向量,probs為一個由[0,1]之間的概率值組成的數值向量。
求向量x的第25和第75百分位數:
> quantile(c(1,2,3,4,5,6,7),c(.25,.75)) 25% 75% 2.5 5.5
·range(x):求值域。
> range(c(1,2,3,4,5,6,7)) [1] 1 7 > diff(range(c(1,2,3,4,5,6,7))) [1] 6
·sum(x):求和。
> sum(c(1,2,3,4,5,6,7)) [1] 28
·diff(x, lag=n):滯后差分,lag用以指定滯后幾項。默認的lag值為1。
> x<- c(1, 5, 23, 29) > diff(x) [1] 4 18 6
·min(x):最小值。
> min(c(1,2,3,4,5,6,7)) [1] 1
·max(x):最大值。
> max(c(1,2,3,4,5,6,7)) [1] 7
·scale(x,center=TRUE, scale=TRUE):為數據對象x按列進行中心化(center=TRUE)或標準化(center=TRUE, scale=TRUE)。
默認情況下,函數scale()對矩陣或數據框的指定列進行均值為0、標準差為1的標準化:
mydata <- scale (mydata)
要對每一列進行任意均值和標準差的標準化,可以使用如下代碼:
mydata <- scale (mydata)*SD+M
其中,M是想要的均值,SD為想要的標準差。
以下代碼演示了計算某個數值向量的均值和標準差的兩種方式,有助于理解統計函數。
> x <- c(1,2,3,4,5,6,7,8,9,15,12) > mean(x) [1] 6.545455 > sd(x) [1] 4.274661 > n<- length(x) > meanx <- sum(x)/n > css <- sum((x-meanx)^2) > sdx <- sqrt(css/(n-1)) > meanx [1] 6.545455 > sdx [1] 4.274661
2.2.3 概率函數
概率函數通常用來生成特征已知的模擬數據,以及在用戶編寫的統計函數中計算概率值。
在R中,概率函數形如:
[dpqr]distribution_abbrevation()
其中第一個字母表示其所指分布的某一方面。
·d=密度函數(density)。
·p=分布函數(distribution function)。
·q=分位數函數(quantile function)。
·r=生成隨機數(隨機偏差)。
常用的概率函數和縮寫如下。
·Beta分布:beta。
·Logistic分布:logis。
·二項分布:binom。
·多項分布:multinom。
·柯西分布:cauchy。
·負二項分布:nbinom。
·(非中心)卡方分布:chisq。
·正態分布:norm。
·指數分布:exp。
·泊松分布:pois。
·F分布:f。
·Wilcoxon符號秩分布:signrank。
·Gamma分布:gamma。
·t分布:t。
·幾何分布:geom。
·均勻分布:unif。
·超幾何分布:hyper。
·Weibull分布:weibull。
·對數正態分布:lnorm。
·Wilcoxon秩和分布:wilcox。
我們以正態分布函數為例,了解這些函數的使用方法。如果不指定一個均值和標準差,則函數將假定其為標準正態分布(均值為0,標準差為1)。密度函數(dnorm)、分布函數(pnorm)、分位數函數(qnorm)和隨機數生成函數(rnorm)的使用。標準正態分布概率密度函數如圖2-1所示。

▲圖2-1 標準正態分布概率密度函數
> x <- pretty(c(-3,3), 30) > y <-dnorm(x) plot(x, y, type="l", xlab="NormalDeviate", ylab="Density", yaxs="i" )
位于z=1.96左側的標準正態曲線下方面積是多少?
> pnorm(1.96) [1] 0.9750021
標準正態分布的0.975分位點值為多少?
> qnorm(.975) [1] 1.959964
均值為500,標準差為100的正態分布的0.9分位點值為多少?
> qnorm(.9, mean=500, sd=100) [1] 628.1552
生成50個均值為50,標準差為10的正態隨機數。
> rnorm(50, mean=50, sd=10) [1] 57.86568 65.15495 47.67627 57.58522 51.54444 59.29841 60.00383 67.83573 [9] 51.72464 60.84461 30.48510 30.39757 46.26959 51.60296 45.61807 49.22042 [17] 60.76764 40.72064 53.75776 58.18664 56.91128 40.66373 45.59667 49.54243 [25] 54.24555 45.09342 42.04018 49.76482 52.20662 29.72038 50.26902 34.14525 [33] 47.51494 37.97045 42.22522 46.45015 56.12777 45.11604 53.29744 53.34638 [41] 51.84571 68.33274 38.24069 47.35651 56.88580 43.39235 47.03165 55.79904 [49] 51.18197 40.79011
2.2.4 字符處理函數
數學和統計函數是用來處理數值型數據的,而字符處理函數可以從文本型數據中抽取信息,或者為打印輸出和生成報告重設文本的格式。一些常用的字符處理函數如下所示。
·nchar(x):返回字符串x中的字符數量。
> x <- c("ab", "cde", "dsdesd") > length(x) [1] 3 > nchar(x[3]) [1] 6
·substr(x, start, stop):函數返回給定字符串x中指定位置范圍start:stop上的子字符串。
> x <- "abcdefghij" > substr(x, 2, 4) [1] "bcd" > substr(x, 2, 4) <- "22222" > x [1] "a222efghij"
·grep(pattern, x, ignore. case=FALSE, fixed=FALSE):在字符串向量x中搜索給定的子字符串pattern。如果x有n個元素,即包括n個字符串,則grep(pattern, x)會返回一個長度不超過n的向量。若fixed=FALSE,則pattern為一個正則表達式;若fixed=TRUE,則pattern為一個文本字符串,返回值為匹配的下標。
> grep("A",c("b","A","c"),fixed=TRUE) [1] 2 > grep("A",c("b","A","c"),fixed=FALSE) [1] 2
·sub(pattern, replacement, x, ignore.case=FALSE, fixed=FALSE):在x中搜索pattern,并以文本replacement將其替換。若fixed=FALSE,則pattern為一個正則表達式;若fixed=TRUE,則pattern為一個文本字符串。
> sub("\\s",".","Hello There") [1] "Hello.There"
注意,“\s”是一個用來查找空白的正則表達式,使用“\\s”而不用“\”的原因在于后者是R中的轉義字符。
·strsplit(x, split, fixed=FALSE):在split處分割字符向量x中的元素拆分成若干個子字符串,返回這些子字符串組成的R列表。若fixed=FALSE,則pattern為一個正則表達式;若fixed=TRUE,則pattern為一個文本字符串。
> y <- strsplit("abc", "") > y [[1]] [1] "a" "b" "c" > unlist(y)[2] [1] "b" unlist(y)[2] > sapply(y, "[", 2) [1] "b" > strsplit("6-16-2011", split="-") [[1]] [1] "6" "16" "2011"
·paste(…, sep=""):把若干個字符串拼接起來,返回一個長字符串,分隔符為sep。
> paste("x", 1:3,sep="") [1] "x1" "x2" "x3" > paste("x",1:3,sep="M") [1] "xM1" "xM2" "xM3" > paste("Today is", date()) [1] "Today is Thu Oct 22 04:58:542015" > paste ("North", "Pole") [1] "North Pole" > paste ("North", "Pole", sep="") [1] "NorthPole" > paste ("North", "Pole", sep=".") [1] "North.Pole" > paste ("North", "and", "Pole", "South") [1] "North and Pole South"
·toupper(x):大寫轉換。
> toupper("abc") [1] "ABC"
·tolower(x):小寫轉換。
> tolower("DEF") [1] "def"
·regexpr(pattern, text):在字符串text中尋找pattern,返回與pattern匹配的第一個子字符串的起始字符位置。
> regexpr("uat","Equator") [1] 3
·gregexpr(pattern, text):功能與regexpr()函數一樣,不過它會尋找與pattern匹配的全部子字符串的起始位置。
> gregexpr("iss","Missppiissist") [[1]] [1] 2 8
2.2.5 其他實用函數
以下函數對于數據管理和處理同樣非常實用。
·length(x):對象x的長度。
> x <- c(1,2,3,4,5,6) > length(x) [1] 6
·seq(from, to, by):生成一個序列。
> mysequ <- seq(1, 20, 3) > mysequ [1] 1 4 7 10 13 16 19
·rep(x, n):將x重復n次。
> rep("ABC",3) [1] "ABC" "ABC" "ABC" > rep(1:3,3) [1] 1 2 3 1 2 3 1 2 3
·cut(x, n):將連續型變量x分割為有著n個水平的因子。
> x <- c(1:100) > cut(x, 5) [1] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] [6] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] [11] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] [16] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8] [21] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] [26] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] [31] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] [36] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6] [41] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] [46] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] [51] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] [56] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4] [61] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] [66] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] [71] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] [76] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2] [81] (80.2,100] (80.2,100] (80.2,100] (80.2,100] (80.2,100] [86] (80.2,100] (80.2,100] (80.2,100] (80.2,100] (80.2,100] [91] (80.2,100] (80.2,100] (80.2,100] (80.2,100] (80.2,100] [96] (80.2,100] (80.2,100] (80.2,100] (80.2,100] (80.2,100] Levels: (0.901,20.8) (20.8,40.6) (40.6,60.4) (60.4,80.2) (80.2,100)
·pretty(x, n)創建美觀的分割點。通過選取n+1個等間距的取整值,將一個連續型變量x分割為n個區間。
重點提示:R函數在許多數值計算及字符和數值數據處理方面,為簡化程序編寫過程尤其有用。我們應了解各種函數的功用,掌握一些常見函數的應用,并在R語句中應用這些函數。
- 自愿審計動機與質量研究:基于我國中期財務報告審計的經驗證據
- Azure Strategy and Implementation Guide
- Learning Informatica PowerCenter 9.x
- Learning Microsoft Azure
- 陜西國家統計調查專題研究集萃(2006—2015)
- 財務建模與綜合估值:數據研磨、模型校準、動態估值
- AO2011實用手冊
- 從零開始學房地產會計
- 行政單位經濟責任審計實務指南
- Getting Started with Microsoft Lync Server 2013
- PMP備考寶典:路晨帶你去通關
- Stata統計分析與行業應用案例詳解(第2版)
- Oracle Primavera Contract Management,Business Intelligence Publisher Edition v14
- 效益實現管理實踐指南
- 審計學理論與實務