R高級數(shù)據(jù)管理——函數(shù)

1.數(shù)值與字符處理函數(shù)

R語言中數(shù)據(jù)處理最重要的函數(shù):數(shù)值(數(shù)學(xué)涂滴、統(tǒng)計友酱、概率)函數(shù)和字符處理函數(shù)。

1.1 數(shù)學(xué)函數(shù)

#絕對值
abs(x)

#平方根
sqrt(x)

#不小于x的最小整數(shù)
ceiling(x)

#不大于x的最大整數(shù)
floor(x)

#向0的方向截取x的整數(shù)部分
trunc(x)

#將x舍入為指定位的小數(shù)
round(x, digits=n)

#將x舍入為指定的有效數(shù)字位數(shù)
signif(x, digits=n)

#三角函數(shù)家族
cos(x)柔纵、sin(x)缔杉、tan(x)、acos(x)首量、asin(x)壮吩、atan(x)进苍、cosh(x)加缘、sinh(x)、tanh(x)觉啊、acosh(x)拣宏、asinh(x)、atanh(x)

#對x取以n為底的對數(shù)
log(x, base=n)

#對x取以e為底的對數(shù)
log(x)

#對x取以10為底的對數(shù)
log10(x)

#e的指數(shù)函數(shù)
exp(x)

數(shù)值(數(shù)學(xué)杠人、統(tǒng)計勋乾、概率)函數(shù)用在向量、矩陣嗡善、數(shù)據(jù)框時辑莫,單獨(dú)用于其中每一個獨(dú)立的值。

1.2 統(tǒng)計函數(shù)

#平均數(shù)
mean(x)

#中位數(shù)
median()

#標(biāo)準(zhǔn)差
sd(x)

#方差
var(x)

#絕對中位差
mad(x)

#求分位數(shù)罩引,其中x為待求分位數(shù)的數(shù)值型向量各吨,probs為一個由[0,1]之間的概率值組成的數(shù)值向量
quantile(x, probs)

#求值域
range(x)

#求和
sum(x)

#滯后差分
diff(x, lag=n)

#求最小值
min(x)

#求最大值
max(x)

#為數(shù)據(jù)對象x按列進(jìn)行中心化或標(biāo)準(zhǔn)化
scale(x, center=TRUE, scale=TRUE)

許多統(tǒng)計函數(shù)都擁有可以影響輸出結(jié)果的可選參數(shù),比如下面這行代碼:

z <- mean(x, trim = 0.05, na.rm = TRUE)

trim()為截尾平均數(shù)袁铐,代碼表示去除最大5%和最小5%的數(shù)據(jù)(即異常值)和所有缺失值后的算術(shù)平均數(shù)揭蜒。因此在使用統(tǒng)計函數(shù)時横浑,可以獲取幫助。這里簡單介紹一下如何在R中獲得某個函數(shù)的幫助信息:

> help(mean)
> ?mean
image

如果要想嘗試幫助文件中的例子屉更,可以使用example()函數(shù)來運(yùn)行他們:

>example(mean)

mean> x <- c(0:10, 50)

mean> xm <- mean(x)

mean> c(xm, mean(x, trim = 0.10))
[1] 8.75 5.50

1.3 概率函數(shù)

與統(tǒng)計函數(shù)類似徙融,但通常用來生成特征已知的模擬數(shù)據(jù),以及在用戶編寫的統(tǒng)計函數(shù)中計算概率值瑰谜。常見的概率函數(shù)如下:

image

在R中欺冀,概率函數(shù)形如:

[dpqr]distribution_abbreviation()

其中第一個字母表示其所指分布的某一方面:
d = 密度函數(shù)(density)
p = 分布函數(shù)(distribution function)
q = 分位數(shù)函數(shù)(quantile function)
r = 生成隨機(jī)數(shù)(隨機(jī)偏差)

以我們熟悉的正態(tài)分布(norm)為例,如果不指定均值和標(biāo)準(zhǔn)差似舵,將生成標(biāo)準(zhǔn)正態(tài)分布(即均值為0脚猾,標(biāo)準(zhǔn)差為1),相應(yīng)統(tǒng)計函數(shù)有密度函數(shù)(dnorm)砚哗、分布函數(shù)(pnorm)龙助、分位數(shù)函數(shù)(qnorm)和隨機(jī)生成函數(shù)(rnorm),下面根據(jù)實(shí)例簡單實(shí)踐一下:

Q1:如何在在區(qū)間[-3, 3]上繪制標(biāo)準(zhǔn)正態(tài)曲線
#正態(tài)分布
> x <- pretty(c(-3,3), 30)
> y <-dnorm(x) 
> plot(x, y,type="l", xlab="NormalDeviate",ylab="Density", yaxs="i" )

image

函數(shù)pretty(x, N)的含義是對變量x進(jìn)行美觀分割蛛芥,主要是將連續(xù)變量x分割為N 個區(qū)間(N+1個端點(diǎn))提鸟,并使端點(diǎn)為取整值,常常在繪圖中使用仅淑。

Q2:位于 z=1.96 左側(cè)的標(biāo)準(zhǔn)正態(tài)曲線下方面積是多少称勋?
> pnorm(1.96)
[1] 0.9750021
Q3:均值為500,標(biāo)準(zhǔn)差為100的正態(tài)分布的0.9分位點(diǎn)值為多少涯竟?
> qnorm(.9, mean=500, sd=100)
[1] 628.1552
Q4:生成50個均值為50赡鲜,標(biāo)準(zhǔn)差為10的正態(tài)隨機(jī)數(shù)?
> rnorm(50, mean=50, sd=10)
 [1] 51.33490 48.57706 63.51390 46.34352 57.88116 40.30345 58.08860 58.95951 45.35611 42.69611
[11] 47.76489 41.05805 60.20043 49.74406 43.57572 53.75946 66.51277 66.87900 43.25843 51.15859
[21] 42.49729 37.72957 42.39132 43.02164 46.36055 48.86809 61.88639 57.24349 45.76143 41.22546
[31] 52.29699 52.35126 55.69051 56.22872 57.49280 42.42788 30.55075 39.33785 51.86386 64.30678
[41] 51.87697 46.50459 57.92250 45.02302 71.30963 38.96372 65.44749 46.62874 42.62878 45.00120
1.3.1 設(shè)置隨機(jī)種子

每次生成偽隨機(jī)數(shù)時庐船,函數(shù)都會使用一個不同的種子银酬,因此會產(chǎn)生不同的結(jié)果。但實(shí)際中常常需要讓隨機(jī)結(jié)果重現(xiàn)(reproducible)筐钟,為了實(shí)現(xiàn)結(jié)果重現(xiàn)可以通過函數(shù)set.seed()指定種子揩瞪。
下面我們用函數(shù)runif()來生成0到1區(qū)間上服從均勻分布的偽隨機(jī)數(shù)。

> runif(5)
[1] 0.82012485 0.78120557 0.45770940 0.05807683 0.56365733
> runif(5)
[1] 0.4447013 0.5169131 0.2474369 0.7904778 0.1449952
> set.seed(12)
> runif(5)
[1] 0.06936092 0.81777520 0.94262173 0.26938188 0.16934812
> set.seed(12)
> runif(5)
[1] 0.06936092 0.81777520 0.94262173 0.26938188 0.16934812

隨機(jī)結(jié)果重現(xiàn)創(chuàng)建一些固定的隨機(jī)示例數(shù)據(jù)篓冲,其目的主要是便于之后隨時取用李破,并與他人共享。

1.3.2 生成多元正態(tài)數(shù)據(jù)

MASS包中的函數(shù)mvrnorm()可以生成給定均值向量和協(xié)方差矩陣的多元正態(tài)分布壹将,調(diào)用格式為:

> mvrnorm(n, mean, sigma)

n 是樣本大小
mean 為均值向量
sigma 是方差-協(xié)方差矩陣(或相關(guān)矩陣)

假設(shè)從如下所示的三元正態(tài)分布中抽取500個觀測:

image
> options(digits=3)
> set.seed(1234)
> mean <- c(230.7, 146.7, 3.6)
> sigma <- matrix(c(15360.8, 6721.2, -47.1, 6721.2, 4700.9, -16.5, -47.1, -16.5, 0.3), nrow=3, ncol=3)
> mydata <- mvrnorm(500, mean, sigma)
> mydata <- as.data.frame(mydata)
> names(mydata) <- c("y", "x1", "x2")
> dim(mydata)
[1] 500   3
> head(mydata, n=10)
       y    x1   x2
1   98.8  41.3 3.43
2  244.5 205.2 3.80
3  375.7 186.7 2.51
4  -59.2  11.2 4.71
5  313.0 111.0 3.45
6  288.8 185.1 2.72
7  134.8 165.0 4.39
8  171.7  97.4 3.64
9  167.2 101.0 3.50
10 121.1  94.5 4.10

1.4 字符處理函數(shù)

數(shù)學(xué)函數(shù)嗤攻、統(tǒng)計函數(shù)和概率函數(shù)用于處理數(shù)值型數(shù)據(jù),而利用字符處理函數(shù)可以從文本型數(shù)據(jù)中抽取信息诽俯。

1.4.1 nchar()函數(shù)

主要使用來返回字符長度妇菱。與它相似的有length()函數(shù),而length()則是用來返回字符數(shù)量。如下代碼可以看出區(qū)別:

> x="John"
> y=c("Jim","Tony","kavry")
> nchar(x) 
[1] 4
> nchar(y) 
[1] 3 4 5
> length(x)
[1] 1
> length(y)
[1] 3
1.4.2 substr()函數(shù)
substr(x, start, stop)

substr()函數(shù)用于提取或替換一個字符向量中的子串恶耽,例如:

> hello <- "helloeverybody"
> substr(hello,2,5)
[1] "ello"
> substr(hello,2,5) <- "2222"
> hello
[1] "h2222everybody"
1.4.3 grep()函數(shù)
grep(pattern, x, ignore. case=FALSE, fixed=FALSE)

grep()函數(shù)用于在x中搜索某種模式密任,若fixed=FALSE,則pattern為一個正則表達(dá)式偷俭。若fixed=TRUE浪讳,則pattern為一個文本字符串,返回值為匹配的下標(biāo)涌萤。

> grep(pattern = "boy", x = c("abcb", "boy", "baby"))
[1] 2

grep()函數(shù)容易混淆的有grepl()函數(shù)淹遵,區(qū)別是grepl()函數(shù)返回的是邏輯值:

> grepl(pattern = "boy", x = c("abcb", "boy", "baby"))
[1] FALSE  TRUE FALSE
1.4.4 sub()函數(shù)
sub(pattern, replacement, x, ignore.case=FALSE, fixed=FALSE)

x中搜索pattern,并以文本replacement將其替換负溪。若 fixed=FALSE透揣,則pattern為一個正則表達(dá)式。若fixed=TRUE川抡, 則pattern為一個文本字符串辐真。需要注意,sub函數(shù)在搜索到第一個pattern后就會停止崖堤,而不會將所有的pattern都替換掉侍咱。

#替換從左到右第一個b為a
> ab <- "abababababab"
> sub("b","a",ab,T)
[1] "aaababababab"

當(dāng)我們需要將所有的pattern都替換,則要使用gsub()函數(shù):

> ab <- "abababababab"
> sub("b","a",ab,T)
[1] "aaababababab"
1.4.5 strsplit()函數(shù)
strsplit(x, split, fixed=FALSE)

split處分割字符向量x中的元素密幔。若fixed=FALSE楔脯,則 pattern為一個正則表達(dá)式。若fixed=TRUE胯甩,則pattern為一個文本字符串昧廷。

> strsplit(ab,"")
[[1]]
 [1] "a" "b" "a" "b" "a" "b" "a" "b" "a" "b" "a" "b"

注意上方返回的是一個list

1.4.6 paste函數(shù)
paste(…, sep="")

連接字符串偎箫,分隔符為sep木柬,在不指定分割符的情況下,默認(rèn)分割符是空格镜廉。

> paste("Today is", date())
[1] "Today is Thu Mar 19 20:37:10 2020" 
> paste("x",1:3,sep="M")
[1] "xM1" "xM2" "xM3"

如果在paste后面加一個0變成paste0()函數(shù)弄诲,它與paste函數(shù)的用法相似愚战,唯一的區(qū)別就是paste0在不指定分割符的情況下娇唯,默認(rèn)分割符是空。

> paste0("Today is", date())
[1] "Today isThu Mar 19 20:41:38 2020"
> paste0("x",1:3,sep="M")
[1] "x1M" "x2M" "x3M"
1.4.7 toupper()tolower()

他們是大小寫轉(zhuǎn)換函數(shù)寂玲。

> toupper("abc")
[1] "ABC"
> tolower("ABC")
[1] "abc"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塔插,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拓哟,更是在濱河造成了極大的恐慌想许,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異流纹,居然都是意外死亡糜烹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門漱凝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疮蹦,“玉大人,你說我怎么就攤上這事茸炒°岛酰” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵壁公,是天一觀的道長感论。 經(jīng)常有香客問我,道長紊册,這世上最難降的妖魔是什么比肄? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮囊陡,結(jié)果婚禮上薪前,老公的妹妹穿的比我還像新娘。我一直安慰自己关斜,他們只是感情好示括,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痢畜,像睡著了一般垛膝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丁稀,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天吼拥,我揣著相機(jī)與錄音,去河邊找鬼线衫。 笑死凿可,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的授账。 我是一名探鬼主播枯跑,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼白热!你這毒婦竟也來了敛助?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屋确,失蹤者是張志新(化名)和其女友劉穎纳击,沒想到半個月后续扔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焕数,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年纱昧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堡赔。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡砌些,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出加匈,到底是詐尸還是另有隱情存璃,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布雕拼,位于F島的核電站纵东,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏啥寇。R本人自食惡果不足惜偎球,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辑甜。 院中可真熱鬧衰絮,春花似錦、人聲如沸磷醋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邓线。三九已至淌友,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骇陈,已是汗流浹背震庭。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留你雌,地道東北人器联。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像婿崭,于是被迫代替她去往敵國和親拨拓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容