R語言高級(jí)數(shù)據(jù)管理

本章內(nèi)容主要學(xué)習(xí)


1肤视、數(shù)學(xué)與統(tǒng)計(jì)函數(shù)
2徙赢、字符處理函數(shù)
3字柠、循環(huán)和條件執(zhí)行
4、自編函數(shù)
5狡赐、數(shù)據(jù)整合與重塑

5.1數(shù)值和字符處理函數(shù)

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

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

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

其中對(duì)數(shù)做變換是這些函數(shù)的一個(gè)主要用途窑业。這些函數(shù)也可以作用于矩陣、數(shù)據(jù)框枕屉、和數(shù)值向量常柄。sqrt(c(4, 16, 25))的返回值為c(2,4, 5)

5.1.2統(tǒng)計(jì)函數(shù)

z<-mean(x,trim=0.5,na.rm=TRUE)截尾平均數(shù),即丟棄了最大5%和最小5%的數(shù)據(jù)和所有缺失值后的算術(shù)平均數(shù)搀擂。學(xué)會(huì)使用help()使用每個(gè)函數(shù)的具體用法

統(tǒng)計(jì)函數(shù)

其中主要是diff(x,lag=n)quantitle(x,probs)函數(shù)的學(xué)習(xí)使用西潘。
數(shù)據(jù)標(biāo)準(zhǔn)化
函數(shù)scale()對(duì)矩陣或者數(shù)據(jù)框指定列進(jìn)行均值為0,標(biāo)準(zhǔn)差為1的標(biāo)準(zhǔn)化

newdata<-scale(mydata)
newdata<-scale(mydata)*sd+M
#其中M是想要的均值哨颂,SD為想要的標(biāo)準(zhǔn)差
newdata<-transform(mydata,myvar=sacle(myvar)*10+50)
#對(duì)指定列而不是整個(gè)矩陣或數(shù)據(jù)框進(jìn)行標(biāo)準(zhǔn)化
5.1.3概率函數(shù)

概率函數(shù)通常用來生成特征已知的模擬數(shù)據(jù)喷市,以及在用戶編寫的統(tǒng)計(jì)函數(shù)中計(jì)算概率值
其中第一個(gè)字母表示其所指分布的某一方面:
d = 密度函數(shù)(density)
p = 分布函數(shù)(distribution function)
q = 分位數(shù)函數(shù)(quantile function)
r = 生成隨機(jī)數(shù)(隨機(jī)偏差)

概率分布

標(biāo)準(zhǔn)正態(tài)分布(均值為0,標(biāo)準(zhǔn)差為1)
在每次生成偽隨機(jī)數(shù)的時(shí)候威恼,函數(shù)都會(huì)使用一個(gè)不同的種子品姓,因此也會(huì)產(chǎn)生不同的結(jié)果。你可以通過函數(shù)set.seed()顯式指定這個(gè)種子沃测,讓結(jié)果可以重現(xiàn)(reproducible)缭黔。

5.1.4字符處理函數(shù)
字符處理函數(shù)1

字符處理函數(shù)2

函數(shù)grep()、sub()和strsplit()能夠搜索某個(gè)文本字符串(fixed=TRUE)或某個(gè)正則表達(dá)式(fixed=FALSE蒂破,默認(rèn)值為FALSE)馏谨。正則表達(dá)式:

^[hc]?at
5.1.5其他實(shí)用函數(shù)

其他實(shí)用函數(shù)

注意cat函數(shù)的用法

5.1.6將函數(shù)應(yīng)用于矩陣和數(shù)據(jù)框

R函數(shù)的諸多有趣特性之一,就是它們可以應(yīng)用到一系列的數(shù)據(jù)對(duì)象上附迷,包括標(biāo)量惧互、向量哎媚、矩陣、數(shù)組和數(shù)據(jù)框喊儡。
apply(x,MARGIN,FUN,...),x為數(shù)據(jù)對(duì)象拨与,MARGIN是維度的下標(biāo),F(xiàn)UN是由你指定的函數(shù)艾猜,而...則包括了任何想傳遞給FUN的參數(shù)买喧。其中,MARGIN=1表示行匆赃,MARGIN=2表示列淤毛。
apply()可把函數(shù)應(yīng)用到數(shù)組的某個(gè)維度上,而lapply()和sapply()則可將函數(shù)應(yīng)用到列表(list)上

5.2數(shù)據(jù)處理難題的一套解決方案

options(digits=2)限定了輸出小數(shù)點(diǎn)后的數(shù)字位數(shù)算柳。
例子中由于數(shù)學(xué)低淡、科學(xué)和英語考試的分值不同(均值和標(biāo)準(zhǔn)差相去甚遠(yuǎn),在組合之前需要先讓它們變得可以比較瞬项。一種方法是將變量進(jìn)行標(biāo)準(zhǔn)化蔗蹋,這樣每科考試的成績(jī)就都是用單位標(biāo)準(zhǔn)差來表示,而不是以原始的尺度來表示了囱淋。這個(gè)過程可以使用scale()函數(shù)來實(shí)現(xiàn)猪杭。
數(shù)據(jù)框創(chuàng)建變量dataframe$var
fristname<-sapply(name,"[",1)提取每個(gè)列表中的每個(gè)成分的第一個(gè)元素。

5.3控制流

R程序中的語句是從上至下順序執(zhí)行的妥衣。但有時(shí)你可能希望重復(fù)執(zhí)行某些語句胁孙,僅在滿足特定條件的情況下執(zhí)行另外的語句。這就是控制流結(jié)構(gòu)發(fā)揮作用的地方了称鳞。

為了理解貫穿本節(jié)的語法示例,請(qǐng)牢記以下概念:
語句(statement):是一條單獨(dú)的R語句或一組復(fù)合語句(包含在花括號(hào){}中的一組R語句稠鼻,使用分號(hào)分隔)
條件(cond):是一條被解釋為真(TRUE)或者假(FALSE)的表達(dá)式
表達(dá)式(expr):是一條數(shù)值或者字符串的求值語句
序列(seq):是一個(gè)數(shù)值或字符串序列

5.3.1重復(fù)和循環(huán)

循環(huán)結(jié)構(gòu)重復(fù)地執(zhí)行一個(gè)或一系列語句冈止,直到某個(gè)條件不為真為止。循環(huán)結(jié)構(gòu)包括forwhile結(jié)構(gòu)

1.for結(jié)構(gòu)

for循環(huán)重復(fù)地執(zhí)行一個(gè)語句候齿,直到某個(gè)變量的值不再包含在序列seq中為止熙暴。語法為:

for (var in seq) statement
#單詞Hello被輸出了10次
for(i in 1:10) print("hello")
2.while結(jié)構(gòu)

while循環(huán)重復(fù)地執(zhí)行一個(gè)語句,直到條件不為真為止慌盯。語法為:
while(cond) statement

i<-10
#請(qǐng)確保括號(hào)內(nèi)while的條件語句能夠改變周霉,即讓它在某個(gè)時(shí)刻不再為真——否則循環(huán)將永不停止
while(i>0) {print("hello");i<-i+1}
5.3.2條件執(zhí)行

在條件執(zhí)行結(jié)構(gòu)中,一條或一組語句僅在滿足一個(gè)指定的條件時(shí)執(zhí)行亚皂。條件執(zhí)行結(jié)構(gòu)包括if-else俱箱、ifelse、switch灭必。

1狞谱、if-else結(jié)構(gòu)

控制結(jié)構(gòu)if-else在某個(gè)給定條件為真時(shí)執(zhí)行語句乃摹。也可以同時(shí)在條件為假時(shí)執(zhí)行另外的語句。語法為:

if (cond) statement
if (cond) statement1 else statement2
if (is.character(grade)) grade <- as.factor(grade)
#在第一個(gè)實(shí)例中跟衅,如果grade是一個(gè)字符向量孵睬,它就會(huì)被轉(zhuǎn)換為一個(gè)因子
2、ifelse結(jié)構(gòu)

ifelse結(jié)構(gòu)是if-else結(jié)構(gòu)比較緊湊的向量化版本伶跷,其語法為:ifelse(cond,statement1,statement2)若cond為TRUE掰读,則執(zhí)行第一個(gè)語句;若cond為FALSE叭莫,則執(zhí)行第二個(gè)語句蹈集。
felse(score > 0.5,print("passed")食寡,print("Failed"))

3雾狈、switch結(jié)構(gòu)

switch根據(jù)一個(gè)表達(dá)式的值選擇語句執(zhí)行。語法為:
switch(expr,...)其中的...表示與expr的各種可能輸出值綁定的語句抵皱。

5.4用戶自編函數(shù)

R語言最大優(yōu)點(diǎn)之一就是用戶可以自行添加的函數(shù)善榛。

myfunction<-function(arg1,arg2,...){
statements
return(object)
}

函數(shù)中的對(duì)象只在函數(shù)內(nèi)部使用。返回對(duì)象的數(shù)據(jù)類型是任意的呻畸,從標(biāo)量到列表皆可移盆。
有若干函數(shù)可以用來添加錯(cuò)誤捕獲和糾正功能。你可以使用函數(shù)warning()來生成一條錯(cuò)誤提示信息伤为,用message()來生成一條診斷信息咒循,或用stop()停止當(dāng)前表達(dá)式的執(zhí)行并提示錯(cuò)誤。


Note 一旦開始編寫無論任何長(zhǎng)度和復(fù)雜度的函數(shù)绞愚,優(yōu)秀調(diào)試工具的重要性都會(huì)凸顯出來叙甸。R中有許多實(shí)用的內(nèi)建調(diào)試函數(shù),也有許多用戶貢獻(xiàn)包提供了額外的功能位衩。關(guān)于這個(gè)話題裆蒸,一份優(yōu)秀的參考資料是Duncan Murdoch整理的Debugging in R.


5.5整合與重構(gòu)

R中提供了許多用來整合(aggregate)和重塑(reshape)數(shù)據(jù)的強(qiáng)大方法。

5.5.1轉(zhuǎn)置

使用一個(gè)函數(shù)t()即可對(duì)一個(gè)矩陣或數(shù)據(jù)框進(jìn)行轉(zhuǎn)置糖驴。

5.5.2整合數(shù)據(jù)

在R中使用一個(gè)或多個(gè)by變量和一個(gè)預(yù)先定義好的函數(shù)來折疊(collapse)數(shù)據(jù)是比較容易的僚祷。aggregate(x,by,Fun)
其中x是待折疊的數(shù)據(jù)對(duì)象,by是一個(gè)變量名組成的列表贮缕,這些變量將被去掉以形成新的觀測(cè)辙谜,而FUN則是用來計(jì)算描述性統(tǒng)計(jì)量的標(biāo)量函數(shù),它將被用來計(jì)算新觀測(cè)中的值感昼。

5.5.3reshape包

reshape包①是一套重構(gòu)和整合數(shù)據(jù)集的絕妙的萬能工具装哆。

5.5.3.1融合

melt()函數(shù)

5.5.3.2重鑄

cast()函數(shù)讀取已融合的數(shù)據(jù),并使用你提供的公式和一個(gè)(可選的)用于整合數(shù)據(jù)的函數(shù)將其重塑。調(diào)用格式為:newdata<-cast(md,formula,FUN)其中的md為已融合的數(shù)據(jù)烂琴,formula描述了想要的最后結(jié)果爹殊,而FUN是(可選的)數(shù)據(jù)整合函數(shù)。

5.6總結(jié)

學(xué)習(xí)了控制流結(jié)構(gòu)的使用方法:用循環(huán)重復(fù)執(zhí)行某些語句奸绷,或用分支在滿足某些特定條件時(shí)執(zhí)行另外的語句梗夸。我們探索了折疊、整合以及重構(gòu)數(shù)據(jù)的多種方法号醉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末反症,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子畔派,更是在濱河造成了極大的恐慌铅碍,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件线椰,死亡現(xiàn)場(chǎng)離奇詭異胞谈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)憨愉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門烦绳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人配紫,你說我怎么就攤上這事径密。” “怎么了躺孝?”我有些...
    開封第一講書人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵享扔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我植袍,道長(zhǎng)惧眠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任于个,我火速辦了婚禮锉试,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘览濒。我一直安慰自己,他們只是感情好拖云,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開白布贷笛。 她就那樣靜靜地躺著,像睡著了一般宙项。 火紅的嫁衣襯著肌膚如雪乏苦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,919評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音汇荐,去河邊找鬼洞就。 笑死,一個(gè)胖子當(dāng)著我的面吹牛掀淘,可吹牛的內(nèi)容都是我干的旬蟋。 我是一名探鬼主播,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼革娄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼倾贰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拦惋,我...
    開封第一講書人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤匆浙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后厕妖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體首尼,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年言秸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了软能。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡井仰,死狀恐怖埋嵌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俱恶,我是刑警寧澤雹嗦,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站合是,受9級(jí)特大地震影響了罪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聪全,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一泊藕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧难礼,春花似錦娃圆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谦炬,卻和暖如春悦屏,著一層夾襖步出監(jiān)牢的瞬間节沦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工础爬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甫贯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓看蚜,卻偏偏與公主長(zhǎng)得像叫搁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子失乾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

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