數(shù)據(jù)挖掘與數(shù)據(jù)分析:基于R語(yǔ)言 課件 王陽(yáng) 第1-3章 R語(yǔ)言基礎(chǔ)-線性回歸_第1頁(yè)
數(shù)據(jù)挖掘與數(shù)據(jù)分析:基于R語(yǔ)言 課件 王陽(yáng) 第1-3章 R語(yǔ)言基礎(chǔ)-線性回歸_第2頁(yè)
數(shù)據(jù)挖掘與數(shù)據(jù)分析:基于R語(yǔ)言 課件 王陽(yáng) 第1-3章 R語(yǔ)言基礎(chǔ)-線性回歸_第3頁(yè)
數(shù)據(jù)挖掘與數(shù)據(jù)分析:基于R語(yǔ)言 課件 王陽(yáng) 第1-3章 R語(yǔ)言基礎(chǔ)-線性回歸_第4頁(yè)
數(shù)據(jù)挖掘與數(shù)據(jù)分析:基于R語(yǔ)言 課件 王陽(yáng) 第1-3章 R語(yǔ)言基礎(chǔ)-線性回歸_第5頁(yè)
已閱讀5頁(yè),還剩172頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

DataMiningandDataAnalysiswithR數(shù)據(jù)挖掘與數(shù)據(jù)分析:基于R語(yǔ)言第一章R語(yǔ)言基礎(chǔ)R語(yǔ)言中的數(shù)據(jù)讀取和數(shù)據(jù)導(dǎo)出01R語(yǔ)言中的數(shù)據(jù)類型和對(duì)象02R語(yǔ)言中的控制語(yǔ)句及函數(shù)03R語(yǔ)言中的數(shù)據(jù)處理04數(shù)據(jù)處理包05章節(jié)內(nèi)容1.1R語(yǔ)言中的數(shù)據(jù)讀取和數(shù)據(jù)導(dǎo)出R語(yǔ)言具有強(qiáng)大的數(shù)據(jù)統(tǒng)計(jì)與分析功能,如創(chuàng)建簡(jiǎn)單的數(shù)據(jù)集、輸出數(shù)據(jù)集中的元素、提取數(shù)據(jù)集的子集、計(jì)算均值、計(jì)算方差等。為了提前感受R語(yǔ)言的強(qiáng)大功能,我們首先嘗試一些簡(jiǎn)單的R語(yǔ)言操作:#利用2、5、8生成一個(gè)簡(jiǎn)單的數(shù)據(jù)集xx<-c(2,5,8)#通過數(shù)據(jù)集x構(gòu)造數(shù)據(jù)集qq<-c(x,x,6)#輸出x中的第二個(gè)元素x[2]輸出:[1]5#輸出q中的第三個(gè)元素q[3]輸出:[1]8#提取q中第2至第5個(gè)元素q[2:5]輸出:>q[2:5][1]5825#計(jì)算x中數(shù)據(jù)的均值mean(x)輸出:[1]5#計(jì)算q中數(shù)據(jù)的方差sd(q)輸出:[1]2.478479變量賦值和其他編程語(yǔ)言一樣,R語(yǔ)言中也存在符號(hào)變量。用戶在創(chuàng)建變量時(shí)必須使用賦值運(yùn)算符“<-”給變量賦值,賦值完成后,該變量才正式創(chuàng)建完成,R語(yǔ)言中不允許創(chuàng)建沒有賦值的空變量。R語(yǔ)言中同樣支持通過符號(hào)“=”進(jìn)行賦值,二者在賦值上的效果一樣,用戶可根據(jù)自身喜好選擇。#創(chuàng)建一個(gè)值為2的變量x0x0<-2輸出:>x0[1]2#修改變量x0的值x0<-4輸出:>x0[1]4從文件中讀取數(shù)據(jù)想要從外部文件中直接讀取整個(gè)數(shù)據(jù)框,文件通常需要具備特殊的格式:文件的第一行應(yīng)該為數(shù)據(jù)框中的每列變量命名,其余行包括一個(gè)行標(biāo)簽以及每個(gè)變量的取值。圖1-1為csv文件的格式示例。圖1-1csv文件的格式示例從文件中讀取數(shù)據(jù)常用的讀取文件數(shù)據(jù)的函數(shù)包括read.table()、read.csv()、read.delim()等。首先來看一個(gè)例子:read.table()函數(shù)中的第一個(gè)參數(shù)為要讀取文件的路徑及名稱,header用于指出文件的第一行是否為變量的名字,其默認(rèn)值為FALSE。除了上述三種函數(shù)外,R語(yǔ)言還可以直接讀取Excel文件,具體代碼如下:HousePrice<-read.table("./HousePrices.csv",header=TRUE)HousePrice#導(dǎo)入xlsx包library(xlsx)#讀取myexcel.xlsx文件中的第一個(gè)工作表mydata<-read.xlsx("./myexcel.xlsx",1)#讀取myexcel.xlsx文件中表名為mysheet的工作表mydata<-read.xlsx("./myexcel.xlsx",sheetName="mysheet")從R語(yǔ)言的包中獲取數(shù)據(jù)在R語(yǔ)言中,我們不僅可以從文件中讀取數(shù)據(jù),還可以從R語(yǔ)言的包中獲取數(shù)據(jù)。調(diào)用函數(shù)data()可以查看datasets包中的數(shù)據(jù)集,如圖1-2所示。我們同樣可以對(duì)這些數(shù)據(jù)進(jìn)行處理分析。下面展示如何計(jì)算數(shù)據(jù)集Nile的均值和標(biāo)準(zhǔn)差:>mean(Nile)[1]919.35>sd(Nile)[1]169.2275圖1-2datasets包中的部分?jǐn)?shù)據(jù)集導(dǎo)出數(shù)據(jù)根據(jù)導(dǎo)出文件格式的不同,存在多種文件導(dǎo)出函數(shù)。write.table()、write.csv()、write.xlsx()等函數(shù)可用于將程序中的數(shù)據(jù)導(dǎo)出到指定的文件夾,具體代碼如下:上述函數(shù)中的第一個(gè)參數(shù)為待導(dǎo)出的數(shù)據(jù)集,第二個(gè)參數(shù)為導(dǎo)出文件的路徑及名稱,sep為數(shù)據(jù)的分隔符。write.table(mydata,"./mydata.txt",sep="\t")write.csv(mydata,file="C:/Data/mydata.csv")write.xlsx(mydata,"./mydata.xlsx")1.2R語(yǔ)言中的數(shù)據(jù)類型和對(duì)象R語(yǔ)言是一門面向?qū)ο蟮恼Z(yǔ)言,R語(yǔ)言中的所有操作都需要指明具體的操作對(duì)象,每個(gè)對(duì)象具有相應(yīng)的數(shù)據(jù)類型和數(shù)據(jù)長(zhǎng)度。本節(jié)主要介紹R語(yǔ)言中的數(shù)據(jù)類型和對(duì)象及其代碼實(shí)現(xiàn)。數(shù)據(jù)類型R語(yǔ)言中常用的數(shù)據(jù)類型包括數(shù)值型(numeric)、字符型(character)、復(fù)數(shù)型(complex)和邏輯型(logical),mode()函數(shù)可以指示數(shù)據(jù)類型,length()函數(shù)可以獲取數(shù)據(jù)長(zhǎng)度。a<-64mode(a)輸出:[1]"numeric"length(a)輸出:[1]6sqrt(a)輸出:[1]8a<-"Thecatatemyhomework"sub("cat","pig",a)輸出:[1]"Thepigatemyhomework"y1<--8+3iy2<-6+5imode(y1)輸出:[1]"complex"y1+y2輸出:[1]-2+8ia<-(1+1==3)a輸出:[1]FALSEy3<-TRUE!y3輸出:[1]FALSEy4<-c(T,T,F,F,F)y5<-c(F,F,T,F,F)y4&&y5輸出:[1]FALSEy4&y5輸出:[1]FALSEFALSEFALSEFALSEFALSEy4||y5輸出:[1]TRUEy4|y5輸出:[1]TRUETRUETRUEFALSEFALSER語(yǔ)言中的向量R語(yǔ)言中有多種類型的對(duì)象,包括向量、矩陣、數(shù)據(jù)框、列表和因子。向量是R語(yǔ)言中最常用的一種數(shù)據(jù)類型,其結(jié)構(gòu)簡(jiǎn)潔,構(gòu)造方便,可具體細(xì)分為數(shù)值型向量、字符型向量、邏輯型向量,代碼如下:向量中的元素可使用下標(biāo)引用,示例如下:a<-c(1,3,6.4,7,-8,2)#數(shù)值型向量b<-c("one","two","three")#字符型向量c<-c(TRUE,FALSE,FALSE,TRUE,TRUE)#邏輯型向量#索引a中第2和第4個(gè)元素a[c(2,4)]輸出:[1]37R語(yǔ)言中的矩陣矩陣中所有元素的數(shù)據(jù)類型必須相同,每一列必須擁有相同的長(zhǎng)度。矩陣使用matrix()函數(shù)創(chuàng)建,其一般形式為R語(yǔ)言中的數(shù)據(jù)填充是列優(yōu)先的,即byrow的默認(rèn)值是FALSE,這表示矩陣在接收數(shù)據(jù)時(shí)按列填充,byrow=TRUE意味著矩陣在接收數(shù)據(jù)時(shí)按行填充。dimnames為行和列提供了可選擇的標(biāo)簽,具體代碼如下:mymatrix<-matrix(vector,nrow=r,ncol=c,byrow=FALSE,dimnames=list(char_vector_rownames,char_vector_colnames)#構(gòu)造一個(gè)5行4列的矩陣y<-matrix(1:20,nrow=5,ncol=4)#另一個(gè)示例cells<-c(25,64,72,48)rnames<-c("R1","R2")cnames<-c("C1","C2")mymatrix<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,dimnames=list(rnames,cnames))mymatrix輸出:C1C2R12564R27248mymatrix[,2]#矩陣的第2列輸出:R1R26448mymatrix[1,]#矩陣的第1行輸出:C1C22564mymatrix[2,1]#矩陣的第2行、第1列輸出:[1]72R語(yǔ)言中的數(shù)據(jù)框數(shù)據(jù)框是比矩陣更通用的一種數(shù)據(jù)類型。在數(shù)據(jù)框中,不同的列可以擁有不同的數(shù)據(jù)類型,但每列的長(zhǎng)度必須相等。數(shù)據(jù)框通常使用data.frame()函數(shù)創(chuàng)建。d<-c(1,2,3,4)e<-c("green","red","blue",NA)f<-c(FALSE,TRUE,TRUE,FALSE)mydataframe<-data.frame(d,e,f)names(mydataframe)<-c("ID","Color","Passed")mydataframe[2:3]#獲取2-3列的數(shù)據(jù)輸出:ColorPassed1greenFALSE2redTRUE3blueTRUE4<NA>FALSEmydataframe[c("ID","Passed")]#獲取列名為ID、Passed的數(shù)據(jù)輸出:IDPassed11FALSE22TRUE33TRUE44FALSEmydataframe$Color#獲取列Color的數(shù)據(jù)輸出:[1]"green""red""blue"NA圖1-3數(shù)據(jù)框mydataframeR語(yǔ)言中的列表列表是對(duì)象的有序組合,它可以包含不同類型的元素,比如數(shù)值、向量、矩陣或是另一個(gè)列表。列表使用list()函數(shù)創(chuàng)建:#創(chuàng)建一個(gè)包含字符串,矩陣,邏輯值向量和子列表的列表mylist<-list(c("Blue","Green"),matrix(c(23,6,3,3,9,8),nrow=2),c(FALSE,TRUE),list("Mon",91.87))names(mylist)<-c("Color","A_matrix","Logic","Inner_list")mylist輸出:$Color[1]"Blue""Green"$A_matrix[,1][,2][,3][1,]2339[2,]638$Logic[1]FALSETRUE$Inner_list$Inner_list[[1]][1]"Mon"$Inner_list[[2]][1]91.87R語(yǔ)言中的列表mylist[1]輸出:$Color[1]"Blue""Green"mylist$A_matrix輸出:[,1][,2][,3][1,]2339[2,]638mylist$A_matrix[1,3]輸出:[1]9mylist$Inner_list[1]輸出:[[1]][1]"Mon"R語(yǔ)言中的因子R語(yǔ)言中的因子主要用于對(duì)數(shù)據(jù)進(jìn)行分組,可以記錄數(shù)據(jù)中的類別名稱及類別數(shù)目,如人的性別可以分為男性和女性,考試成績(jī)可以分為優(yōu)、良、差等。因子型變量?jī)?nèi)的所有非重復(fù)值,被稱為因子水平(levels)。在R語(yǔ)言中一般用factor()函數(shù)創(chuàng)建因子型變量。#創(chuàng)建一個(gè)包含5個(gè)male,8個(gè)female的向量myfactor<-c(rep("male",5),rep("female",8))#將其轉(zhuǎn)化為因子型向量myfactor<-factor(myfactor)myfactor輸出:[1]malemalemalemalemalefemalefemalefemalefemalefemalefemalefemalefemaleLevels:femalemalesummary(myfactor)輸出:femalemale85as.character(myfactor)輸出:[1]"male""male""male""male""male""female""female""female""female""female""female""female""female"eger(myfactor)輸出:[1]2222211111111class(myfactor)輸出:[1]"factor"1.3R語(yǔ)言中的控制語(yǔ)句及函數(shù)與其他編程語(yǔ)言類似,R語(yǔ)言也有控制結(jié)構(gòu),便于用戶編寫程序,將數(shù)據(jù)處理的操作程序化、規(guī)范化。R語(yǔ)言中的控制語(yǔ)句主要包括if分支、for循環(huán)、while循環(huán)以及switch語(yǔ)句。同時(shí),R語(yǔ)言是一個(gè)函數(shù)的集合體,不僅允許用戶根據(jù)需求自定義函數(shù),還集成了大量函數(shù)包,幫助用戶完成各種數(shù)據(jù)處理的操作。本節(jié)主要介紹R語(yǔ)言中的控制語(yǔ)句及函數(shù)。if分支if分支也被稱作條件語(yǔ)句,主要用來判斷相應(yīng)條件下的代碼執(zhí)行內(nèi)容,具體語(yǔ)法如下:如果if后的條件判斷為真,則執(zhí)行statements對(duì)應(yīng)的語(yǔ)句,否則執(zhí)行alternativestatements對(duì)應(yīng)的語(yǔ)句。if后的判斷條件可以是邏輯型向量,也可以是數(shù)值型向量。當(dāng)判斷條件為數(shù)值型向量時(shí),0代表?xiàng)l件為假,其余數(shù)值代表?xiàng)l件為真。if(logicalexpression){statements}else{alternativestatements}x<-6if(x>0){print("Positivenumber")}輸出:[1]"Positivenumber"x1<--6if(x1>0){print("Positivenumber")}else{print("Negativenumber")}輸出:[1]"Negativenumber"if分支需要注意的是,else必須與if語(yǔ)句的右大括號(hào)寫在同一行。上述代碼也可以寫成單獨(dú)的一行,得到的輸出結(jié)果一致。R語(yǔ)言的特性允許我們按以下結(jié)構(gòu)編寫代碼:if(x1>0)print("Positivenumber")elseprint("Negativenumber")x2<--8x3<-if(x2>0)23else24x3輸出:[1]24

if分支當(dāng)有多個(gè)條件需要判斷時(shí),可以重復(fù)編寫if…else…if…語(yǔ)句,語(yǔ)法如下:不管有多少個(gè)判斷條件,最終只有一個(gè)條件滿足要求,也只有該條件下的語(yǔ)句會(huì)被執(zhí)行。由于x4的取值為0,因此它只符合else中的條件,故而執(zhí)行結(jié)果為“Zero”。if(test_expression1){statement1}elseif(test_expression2){statement2}elseif(test_expression3){statement3}else{statement4}x4<-0if(x4>0){print("Positivenumber")}elseif(x4<0){print("Negativenumber")}else{print("Zero")}輸出:[1]"Zero"

if分支向量構(gòu)成了R語(yǔ)言的基本組成部分,R語(yǔ)言中的大多數(shù)函數(shù)都將向量作為輸入和輸出,這種代碼向量化的方式比單獨(dú)將相同的函數(shù)應(yīng)用于向量的每個(gè)元素要快得多。與此概念類似,R語(yǔ)言中的if…else語(yǔ)句有一個(gè)向量等價(jià)形式,即ifelse()函數(shù)。ifelse()函數(shù)的語(yǔ)法為:ifelse(cond,statement1,statement2)x5<-c(11,6,3,7,4,91)ifelse(x5%%2==0,"even","odd")輸出:[1]"odd""even""odd""odd""even""odd"for循環(huán)循環(huán)語(yǔ)句是一種重要的編程語(yǔ)句,當(dāng)存在大量重復(fù)性工作時(shí),循環(huán)語(yǔ)句的價(jià)值得以充分體現(xiàn),不僅能削減代碼量,還能提高編程效率,確保問題高效得到解決。for循環(huán)是經(jīng)典的循環(huán)語(yǔ)句之一,其語(yǔ)法如下:上述語(yǔ)法中,seq是一個(gè)向量,而var在循環(huán)中取其每個(gè)值。在每次迭代的過程中,expr都會(huì)得到執(zhí)行。for(varinseq)exprx6<-c(1,32,55,64,7,86,23,9)count1<-0for(valinx6){if(val%%2==0)count1<-count1+1}print(count1)輸出:[1]3#計(jì)算1到1000之間的奇數(shù)和sum_1_1000<-0for(iin1:1000){if(i%%2==1){sum_1_1000<-sum_1_1000+i}}sum_1_1000輸出:[1]250000while循環(huán)while循環(huán)是另一種經(jīng)典的循環(huán)語(yǔ)句,它與for循環(huán)有一定的相似之處,二者之間可以相互轉(zhuǎn)換,其語(yǔ)法如下:其中cond是判斷條件,當(dāng)判斷條件為真時(shí),expr將開始執(zhí)行,expr執(zhí)行結(jié)束時(shí)將重新判斷條件,若判斷條件依舊為真,expr繼續(xù)執(zhí)行,以此類推,直到判斷條件為假時(shí)循環(huán)結(jié)束。while(cond)exprx7<-1while(x7<6){print(x7)x7<-x7+1}輸出:[1]1[1]2[1]3[1]4[1]5while循環(huán)相比于for循環(huán),while循環(huán)更適合循環(huán)次數(shù)不確定的情況。由于while循環(huán)可能陷入無休止的循環(huán),因此當(dāng)循環(huán)體內(nèi)的函數(shù)符合某種條件時(shí),需要借用break語(yǔ)句跳出循環(huán),我們來看下面的示例:#使用while循環(huán)登錄銀行賬戶while(TRUE){cardID<-readline("請(qǐng)輸入銀行卡號(hào):")password<-readline("請(qǐng)輸入賬號(hào)密碼:")if(cardID=="123456"&password=="ILoveR666"){print("賬號(hào)登錄成功!")break}else{print("您的銀行卡號(hào)或者密碼信息有錯(cuò)!")}}輸出:請(qǐng)輸入銀行卡號(hào):123456請(qǐng)輸入賬號(hào)密碼:IlikeR[1]"您的銀行卡號(hào)或者密碼信息有錯(cuò)!"請(qǐng)輸入銀行卡號(hào):789456請(qǐng)輸入賬號(hào)密碼:ILoveR[1]"您的銀行卡號(hào)或者密碼信息有錯(cuò)!"請(qǐng)輸入銀行卡號(hào):123456請(qǐng)輸入賬號(hào)密碼:ILoveR[1]"您的銀行卡號(hào)或者密碼信息有錯(cuò)!"請(qǐng)輸入銀行卡號(hào):123456請(qǐng)輸入賬號(hào)密碼:ILoveR666[1]"賬號(hào)登錄成功!"while循環(huán)需要注意的是,while循環(huán)中的break語(yǔ)句非常關(guān)鍵。當(dāng)用戶輸入了正確的銀行卡號(hào)和賬號(hào)密碼時(shí),程序不僅要提示用戶登錄成功,還要跳出信息輸入的循環(huán)體,此時(shí)便要用到break語(yǔ)句。break語(yǔ)句用于結(jié)束當(dāng)前循環(huán)并跳出整個(gè)循環(huán)體,若沒有break語(yǔ)句,則用戶即使輸入了正確的信息還會(huì)被要求繼續(xù)輸入,即while循環(huán)將陷入無休止的循環(huán),由此可見while循環(huán)中break語(yǔ)句的重要性。switch語(yǔ)句switch語(yǔ)句將測(cè)試的變量與列表中的值(case)進(jìn)行比較,依據(jù)具體的情況選擇相應(yīng)的執(zhí)行語(yǔ)句,其語(yǔ)法如下:switch語(yǔ)句中,如果表達(dá)式的值不是字符串,則將其默認(rèn)設(shè)置為整數(shù)。switch語(yǔ)句中可以包含任意數(shù)量的case語(yǔ)句,每個(gè)case語(yǔ)句后面寫明要比較的值和一個(gè)冒號(hào)。如果表達(dá)式的整數(shù)值介于1和最大參數(shù)之間,則評(píng)估case語(yǔ)句的相應(yīng)元素并返回結(jié)果。如果表達(dá)式為字符串,則該字符串需與case語(yǔ)句中的值完全匹配。若有多個(gè)匹配結(jié)果,則返回第一個(gè)匹配結(jié)果。當(dāng)遇到?jīng)]有匹配結(jié)果時(shí),如果函數(shù)中存在未命名的元素,則返回其值。switch(expression,case1,case2,case3…)switch語(yǔ)句x8<-switch(5,"blue","yellow","green","black","white","pink")x8輸出:[1]"white"x9<-c("A","b","c","D","E","f","G")#cat()函數(shù)是輸出函數(shù)的一種,當(dāng)沒有輸出結(jié)果時(shí),cat()不會(huì)輸出任何東西for(chinx9){cat(ch,":",switch(EXPR=ch,a=1,A=2,c=3,d=4,E=5,F=6,G=1:4,"default0"),"\n")}輸出:A:2b:default0c:3D:default0E:5f:default0G:1234自定義函數(shù)R語(yǔ)言的一項(xiàng)強(qiáng)大功能在于用戶可以添加自定義的函數(shù)。事實(shí)上,R語(yǔ)言中的許多函數(shù)實(shí)際上是函數(shù)的函數(shù)。函數(shù)的結(jié)構(gòu)如下所示:在function()函數(shù)中,括號(hào)內(nèi)的傳入?yún)?shù)是可選的。我們?cè)谧远x函數(shù)時(shí),根據(jù)實(shí)際情況可以不編寫傳入?yún)?shù),也可以編寫多個(gè)傳入?yún)?shù)。myfunction<-function(arg1,arg2…){statementsreturn(object)}#函數(shù)中沒有傳入?yún)?shù)的情況f1<-function(){print("IloveR!")}f1()輸出:[1]"IloveR!"#函數(shù)中有傳入?yún)?shù)的情況f2<-function(num_i){for(iin1:num_i){print("IloveR!")}}f2(3)輸出:[1]"IloveR!"[1]"IloveR!"[1]"IloveR!"自定義函數(shù)需要注意的是,如果自定義的函數(shù)中定義了傳入?yún)?shù),則用戶在后續(xù)調(diào)用函數(shù)時(shí)必須同樣寫明傳入?yún)?shù)的值,否則程序會(huì)報(bào)錯(cuò),以f2()函數(shù)為例:f2()輸出:Errorinf2():缺少參數(shù)"num_i",也沒有缺省值#設(shè)置傳入?yún)?shù)的默認(rèn)值f3<-function(num_i=2){for(iin1:num_i){print("IloveR!")}}f3()輸出:[1]"IloveR!"[1]"IloveR!"f3(1)輸出:[1]"IloveR!"為了減少上述錯(cuò)誤的發(fā)生,用戶可以設(shè)置傳入?yún)?shù)的默認(rèn)值。如果函數(shù)被調(diào)用時(shí)沒有寫明具體的傳入?yún)?shù),默認(rèn)的參數(shù)值則會(huì)作為傳入?yún)?shù)值,示例如下:自定義函數(shù)我們最后來看一個(gè)稍微復(fù)雜的示例,此示例是關(guān)于編寫矩陣轉(zhuǎn)置函數(shù)的。#矩陣的轉(zhuǎn)置f4<-function(x){if(!is.matrix(x)){warning("argumentisnotamatrix:returningNA")return(NA_real_)}y<-matrix(1,nrow=ncol(x),ncol=nrow(x))for(iin1:nrow(x)){for(jin1:ncol(x)){y[j,i]<-x[i,j]}}return(y)}f4(1)輸出:[1]NAWarningmessage:Inf4(1):argumentisnotamatrix:returningNAcf4(mymatrix2)輸出:[,1][,2][,3][1,]888[2,]889[3,]999[4,]966[5,]663[6,]333#構(gòu)造一個(gè)3行6列的矩陣用于測(cè)試mymatrix2<-matrix(c(rep(8,5),rep(9,5),rep(6,4),rep(3,4)),nrow=3,ncol=6)mymatrix2輸出:[,1][,2][,3][,4][,5][,6][1,]889963[2,]889663[3,]899633R語(yǔ)言中的內(nèi)置函數(shù)函數(shù)描述abs(x)求x的絕對(duì)值sqrt(x)求x的平方根ceiling(x)向上取整(如ceiling(3.7)=4)floor(x)向下取整(如floor(8.98)=8)trunc(x)去尾取整(如trunc(4.76)=4)round(x,digits=n)四舍五入(如round(6.7453,digits=2)=6.75)signif(x,digits=n)舍入(如signif(6.7453,digits=2)=6.7)cos(x),sin(x),tan(x)三角函數(shù)(還有:acos(x),cosh(x),acosh(x)等)log(x)自然對(duì)數(shù)函數(shù)log10(x)公用對(duì)數(shù)函數(shù)exp(x)e^x指數(shù)函數(shù)表1-1數(shù)值函數(shù)R語(yǔ)言中的內(nèi)置函數(shù)表1-2字符函數(shù)函數(shù)描述substr(x,start=n1,stop=n2)提取或代替字符向量中的子串x<-"ILoveR"substr(x,2,5)的結(jié)果為"Love"substr(x,2,5)<-"Like"的結(jié)果為"ILikeR"grep(pattern,x,ignore.case=FALSE,fixed=FALSE)在R中搜索模式。如果fixed=FALSE,則模式是一個(gè)正則表達(dá)式。如果fixed=TRUE,則模式為文本字符串。函數(shù)返回匹配的索引。grep("D",c("A","D","c"),fixed=TRUE),返回2sub(pattern,replacement,x,ignore.case=FALSE,fixed=FALSE)在x中查找模式并替換為replacement文本。如果fixed=FALSE,則模式是一個(gè)正則表達(dá)式。如果fixed=TRUE,則模式為文本字符串。sub("\\s",".","HelloWorld"),返回值"Hello.World"strsplit(x,split)在split處拆分字符向量x的元素。strsplit("Love",""),返回值"L","o","v","e"paste(…,sep=)使用sep字符串分隔字符串后連接字符串。paste("a",1:3,sep=""),返回值為c("a1","a2","a3")paste("a",1:3,sep="O"),得c("aO1","aO2","aO3")toupper(x)大寫tolower(x)小寫R語(yǔ)言中的內(nèi)置函數(shù)表1-3概率統(tǒng)計(jì)函數(shù)函數(shù)描述dnorm(x)正態(tài)密度函數(shù)(默認(rèn)值m=0sd=1)#繪制標(biāo)準(zhǔn)正態(tài)曲線x<-pretty(c(-3,3),30)y<-dnorm(x)plot(x,y,type="I",xlab="Deviate",ylab="Density",yaxs="i")pnorm(q)q的累積正態(tài)概率(q左側(cè)正態(tài)曲線下的面積)pnorm(1.96)的結(jié)果為0.975qnorm(p)正常分位數(shù)正態(tài)分布p百分位數(shù)的值qnorm(.9)的結(jié)果為1.28rnorm(n,m=0,sd=1)n個(gè)隨機(jī)正態(tài)偏差,其中均值為m,標(biāo)準(zhǔn)偏差為sd#50個(gè)隨機(jī)正態(tài)變量,平均值=50,標(biāo)準(zhǔn)差=10x<-rnorm(50,m=50,sd=10)dbinom(x,size,prob)二項(xiàng)分布,其中size是樣本大小,prob是正面的概率(pi)#10次翻轉(zhuǎn)中0到5個(gè)公平硬幣正面的概率dbinom(0:5,10,.5)pbinom(q,size,prob)#在10次翻轉(zhuǎn)中出現(xiàn)5個(gè)或更少正面硬幣的概率pbinom(5,10,.5)qbinom(p,size,prob)給出累積值與概率值匹配的數(shù)字。#當(dāng)一枚硬幣被拋101次時(shí),有多少個(gè)正面的概率為0.4qbinom(0.4,101,1/2)輸出結(jié)果為:49rbinom(n,size,prob)從給定樣本產(chǎn)?給定概率的所需數(shù)量的隨機(jī)值#從200個(gè)樣本中以0.3的概率找出9個(gè)隨機(jī)值rbinom(9,200,.3)輸出結(jié)果為:535355675757695265dpois(x,lamda)泊松分布,返回發(fā)生x次隨機(jī)事件的概率ppois(q,lamda)泊松分布,返回累積概率qpois(p,lamda)泊松分布,返回相應(yīng)分位點(diǎn)xrpois(n,lamda)泊松分布,返回每組發(fā)生隨機(jī)事件的次數(shù)dunif(x,min=0,max=1)均勻分布,分布密度punif(q,min=0,max=1)均勻分布,分布函數(shù)qunif(p,min=0,max=1)均勻分布,分位數(shù)函數(shù)runif(n,min=0,max=1)均勻分布,隨機(jī)數(shù)產(chǎn)生函數(shù)R語(yǔ)言中的內(nèi)置函數(shù)表1-4其他統(tǒng)計(jì)函數(shù)函數(shù)描述mean(x,trim=0,na.rm=FALSE)計(jì)算對(duì)象x的均值trim表?截尾平均數(shù),如:trim=0.05表示丟棄最大5%和最小的5%的數(shù)據(jù)后,再計(jì)算算術(shù)平均數(shù)。trim的取值范圍為0~0.5sd(x)計(jì)算對(duì)象x的標(biāo)準(zhǔn)差median(x)計(jì)算對(duì)象x的中位數(shù)quantile(x,probs)計(jì)算對(duì)象x的分位數(shù)range(x)計(jì)算對(duì)象x的范圍sum(x)計(jì)算對(duì)象x的和diff(x,lag=1)滯后差異min(x)計(jì)算對(duì)象x的最小數(shù)max(x)計(jì)算對(duì)象x的最大數(shù)scale(x,center=TRUE,scale=TRUE)列中心或標(biāo)準(zhǔn)化矩陣seq(from,to,by)生成序列seq(1,20,4)結(jié)果為1,5,9,13,17rep(x,ntimes)重復(fù)xntimes次cut(x,n)將因子中的連續(xù)變量除以n個(gè)水平1.4R語(yǔ)言中的數(shù)據(jù)處理作為一種統(tǒng)計(jì)分析軟件,R語(yǔ)言的優(yōu)勢(shì)在于其出色的數(shù)據(jù)處理能力,簡(jiǎn)便而強(qiáng)大的編程語(yǔ)言以及集成的函數(shù)包使得R語(yǔ)言幾乎能夠勝任各種數(shù)據(jù)分析統(tǒng)計(jì)工作。本節(jié)主要介紹R語(yǔ)言中的各種數(shù)據(jù)處理操作。從數(shù)據(jù)集中提取信息R語(yǔ)言中有許多函數(shù)可以提取對(duì)象或數(shù)據(jù)集的內(nèi)容。ls()函數(shù)用于列出當(dāng)前工作環(huán)境中的所有對(duì)象names()函數(shù)可用于提取對(duì)象中的變量

str()函數(shù)用于展示對(duì)象的結(jié)構(gòu)levels()函數(shù)可以列出因子型變量中的因子水平dim()函數(shù)用于獲取矩陣等數(shù)據(jù)類型對(duì)象的維度class()函數(shù)可用于獲取對(duì)象的數(shù)據(jù)類型直接輸入某個(gè)對(duì)象的名稱可獲取對(duì)象中包含的所有元素head()函數(shù)用于獲取數(shù)據(jù)的開頭幾行tail()函數(shù)用于獲取數(shù)據(jù)的末尾幾行從數(shù)據(jù)集中提取信息ls()輸出:[1]"a""b""c""cells""ch""cnames""d""e""f""f1"[11]"f2""f3""f4""mydataframe""myfactor""mylist""mymatrix""mymatrix2""rnames""x"[21]"x1""x2""x3""x4""x5""x8""x9"names(mydataframe)輸出:[1]"ID""Color""Passed"str(mydataframe)輸出:'data.frame':4obs.of3variables:$ID:num1234$Color:chr"green""red""blue"NA$Passed:logiFALSETRUETRUEFALSElevels(myfactor)輸出:[1]"female""male"dim(mymatrix2)輸出:[1]36class(mylist)輸出:[1]"list"#輸出mymatrix2mymatrix2輸出:[,1][,2][,3][,4][,5][,6][1,]889963[2,]889663[3,]899633#輸出mymatrix2的前2行head(mymatrix2,2)輸出:[,1][,2][,3][,4][,5][,6][1,]889963[2,]889663#輸出mymatrix2的后2行tail(mymatrix2,2)輸出:[,1][,2][,3][,4][,5][,6][2,]889663[3,]899633缺失信息處理在R語(yǔ)言中,缺失的信息用符號(hào)NA(notavailable)表示,不存在的數(shù)值(如除以0)用符號(hào)NaN(notanumber)表示。不同于SAS,R語(yǔ)言對(duì)字符型數(shù)據(jù)和數(shù)值型數(shù)據(jù)使用相同的符號(hào)。is.na()函數(shù)用于驗(yàn)證數(shù)據(jù)中的缺失值,其返回值為邏輯向量,若數(shù)據(jù)為NA,則返回TRUE,否則返回FALSE。R中還允許用戶將元素重新編碼為缺失值。缺失數(shù)據(jù)會(huì)對(duì)數(shù)據(jù)分析的結(jié)果和速度造成一定的影響,因此在通常情況下,我們?cè)谶M(jìn)行數(shù)據(jù)分析時(shí)往往希望移除缺失數(shù)據(jù)。在R語(yǔ)言中通過將參數(shù)na.rm的值設(shè)置為TRUE即可達(dá)到此目的。complete.cases()函數(shù)返回一個(gè)邏輯向量,指示數(shù)據(jù)集中沒有缺失數(shù)據(jù)的部分。na.omit()函數(shù)用于返回刪除缺失值后的對(duì)象。缺失信息處理#驗(yàn)證向量中的缺失值x10<-c(1,2,3,4,5,NA,7,NA,10)is.na(x10)輸出:[1]FALSEFALSEFALSEFALSEFALSETRUEFALSETRUEFALSE#將x10中的第4個(gè)元素重新編碼為缺失值x10[4]<-NAx10輸出:[1]123NA5NA7NA10x11<-c(1,23,NA,16,47,26,34,93,NA,65)mean(x11)輸出:[1]NAmean(x11,na.rm=TRUE)輸出:[1]38.125#構(gòu)造一個(gè)4行5列的矩陣mydata<-matrix(c(x10,x11,34),nrow=4,ncol=5)mydata輸出:[,1][,2][,3][,4][,5][1,]15101693[2,]2NA147NA[3,]37232665[4,]NANANA3434#獲取mydata中含有缺失數(shù)據(jù)的行mydata[!complete.cases(mydata),]輸出:[,1][,2][,3][,4][,5][1,]2NA147NA[2,]NANANA3434#刪除mydata中含有缺失值的行.mydata_withoutNA<-na.omit(mydata)mydata_withoutNA輸出:[,1][,2][,3][,4][,5][1,]15101693[2,]37232665attr(,"na.action")[1]42attr(,"class")[1]"omit"運(yùn)算符對(duì)于有編程基礎(chǔ)的讀者來說,R語(yǔ)言中的二進(jìn)制運(yùn)算符和邏輯運(yùn)算符看起來將會(huì)非常熟悉,它們類似于其他編程語(yǔ)言中的運(yùn)算符。需要注意的是,二元運(yùn)算符適用于向量、矩陣以及標(biāo)量。運(yùn)算符描述+加法運(yùn)算符-減法運(yùn)算符*乘法運(yùn)算符/除法運(yùn)算符^或者**冪運(yùn)算符x%%y模數(shù)(xmody)如:7%%2=1x%/%y整數(shù)除法運(yùn)算符如:7%/%2=3運(yùn)算符描述<小于<=小于等于>大于>=大于等于==等于!=不等于!x非xx|yx或yx&yx和yisTRUE(x)驗(yàn)證x是否為真表1-5R語(yǔ)言中的算術(shù)運(yùn)算符表1-6R語(yǔ)言中的邏輯運(yùn)算符運(yùn)算符我們來看一些關(guān)于運(yùn)算符的具體示例:R語(yǔ)言中還封裝了許多常用的數(shù)據(jù)統(tǒng)計(jì)函數(shù),如對(duì)數(shù)運(yùn)算函數(shù)log20、開方函數(shù)sqrt()等,讀者可自行探索。#獲取向量x12中大于6或者小于2的元素x12<-c(1:8)x12[(x12>6)|(x12<2)]輸出:[1]178log2(9)輸出:[1]3.169925sqrt(27)輸出:[1]5.196152替換現(xiàn)有字段中的數(shù)據(jù)數(shù)據(jù)處理的過程中,往往需要替換現(xiàn)有字段中的數(shù)據(jù),在R語(yǔ)言中有多種方式達(dá)到這一目的。我們首先構(gòu)造一個(gè)數(shù)據(jù)框schoolData_o,該數(shù)據(jù)框中含有三個(gè)字段:ID、Grade、Status,每個(gè)字段包含8個(gè)元素,其中sample()函數(shù)為取樣函數(shù),用于隨機(jī)打亂字段Grade和Status中的元素順序。原始數(shù)據(jù)框構(gòu)造完畢后,我們將其復(fù)制到數(shù)據(jù)框schoolData中,之后所有的操作都在schooData上進(jìn)行。值得一提的是,每開始一輪新的操作,將重置schoolData中的元素為schoolData_o,schoolData_o中的元素如圖1-4所示。圖1-4schoolData_o中的元素替換現(xiàn)有字段中的數(shù)據(jù)#把數(shù)據(jù)框schoolData中Grade字段的全部元素替換成數(shù)值5schoolData<-schoolData_oschoolData$Grade<-5schoolData輸出:IDGradeStatus115open225open335close445close555open665close775open885closeschoolData<-schoolData_oschoolData$Grade<-"Five"schoolData輸出:IDGradeStatus11Fiveopen22Fiveopen33Fiveclose44Fiveclose55Fiveopen66Fiveclose77Fiveopen88FivecloseschoolData<-schoolData_oschoolData$Grade<-NAschoolData輸出:IDGradeStatus11NAopen22NAopen33NAclose44NAclose55NAopen66NAclose77NAopen88NAclose下面將用幾個(gè)示例展現(xiàn)如何替換R語(yǔ)言中現(xiàn)有字段中的數(shù)據(jù)。替換現(xiàn)有字段中的數(shù)據(jù)#把數(shù)據(jù)框schoolData中Grade字段內(nèi)取值為5的元素替換成GradeFiveschoolData<-schoolData_oschoolData$Grade[schoolData$Grade==5]<-"GradeFive"schoolData輸出:IDGradeStatus111open223open334close442close55GradeFiveopen66GradeFiveclose772open88GradeFiveclose#把數(shù)據(jù)框schoolData中Grade字段內(nèi)取值小于等于5的元素替換成GradeFiveorLessschoolData<-schoolData_oschoolData$Grade[schoolData$Grade<=5]<-"GradeFiveorLess"schoolData輸出:IDGradeStatus11GradeFiveorLessopen22GradeFiveorLessopen33GradeFiveorLessclose44GradeFiveorLessclose55GradeFiveorLessopen66GradeFiveorLessclose77GradeFiveorLessopen88GradeFiveorLesscloseschoolData<-schoolData_oschoolData$Grade[1:4]<-NAschoolData$Grade[is.na(schoolData$Grade)]<-"MissingGrade"schoolData輸出:IDGradeStatus11MissingGradeopen22MissingGradeopen33MissingGradeclose44MissingGradeclose555open665close772open885close下面展示了如何應(yīng)用條件以便僅替換特定行中的數(shù)據(jù)。需要注意的是,如果想用某個(gè)值替換NA,則不能使用"value"=="NA",必須使用is.na()函數(shù)。替換現(xiàn)有字段中的數(shù)據(jù)#找到數(shù)據(jù)框schoolData中Grade字段內(nèi)取值等于5,且Status字段內(nèi)值為open的行,把該行Type字段元素賦值為ElementaryschoolData<-schoolData_oschoolData$Type[schoolData$Grade==5&schoolData$Status=="open"]<-"Elementary"schoolData輸出:IDGradeStatusType111open<NA>223open<NA>334close<NA>442close<NA>555openElementary665close<NA>772open<NA>885close<NA>下面展示了如何根據(jù)多個(gè)條件替換數(shù)據(jù)。#將數(shù)據(jù)框schoolData中Grade字段內(nèi)的元素復(fù)制到新列CopyOfGrade中schoolData<-schoolData_oschoolData$CopyOfGrade<-schoolData$GradeschoolData輸出:IDGradeStatusCopyOfGrade111open1223open3334close4442close2555open5665close5772open2885close5下面展示了如何復(fù)制現(xiàn)有字段。替換現(xiàn)有字段中的數(shù)據(jù)#在數(shù)據(jù)框schoolData中創(chuàng)建一個(gè)新的字段NewGradeschoolData<-schoolData_oschoolData$NewGrade<-NA#將原Grade字段中數(shù)值為5的元素賦值到NewGrade中schoolData$NewGrade[schoolData$Grade==5]<-5schoolData輸出:IDGradeStatusNewGrade111openNA223openNA334closeNA442closeNA555open5665close5772openNA885close5下面基于字段Grade創(chuàng)建一個(gè)名為NewGrade的新字段。替換現(xiàn)有字段中的數(shù)據(jù)#創(chuàng)建兩個(gè)成績(jī)類別schoolData<-schoolData_oschoolData$GradeCat<-ifelse(schoolData$Grade>3,c("good"),c("bad"))schoolData輸出:IDGradeStatusGradeCat111openbad223openbad334closegood442closebad555opengood665closegood772openbad885closegood為了重新編碼數(shù)據(jù),我們可能會(huì)使用一種或多種R語(yǔ)言的控制結(jié)構(gòu)。在數(shù)據(jù)框中創(chuàng)建字段GradeCat,并依據(jù)字段Grade中的數(shù)值創(chuàng)建三個(gè)成績(jī)類別bad、middle、good。與前面提過的示例一樣,我們可以再次使用邏輯運(yùn)算符&或任何其他運(yùn)算符來生成我們想要的條件:#創(chuàng)建三個(gè)成績(jī)類別schoolData<-schoolData_oattach(schoolData)schoolData$GradeCat[Grade>3]<-"good"schoolData$GradeCat[Grade>1&Grade<=3]<-"middle"schoolData$GradeCat[Grade<=1]<-"bad"detach(schoolData)schoolData輸出:IDGradeStatusGradeCat111openbad223openmiddle334closegood442closemiddle555opengood665closegood772openmiddle885closegood變量的重命名在數(shù)據(jù)處理的過程中,有時(shí)為了提高編碼的效率與可讀性,我們需要修改數(shù)據(jù)集中某幾列的變量名,這在R語(yǔ)言中有多種實(shí)現(xiàn)方式。我們首先構(gòu)造一個(gè)簡(jiǎn)單的數(shù)據(jù)框simpleData_o,該數(shù)據(jù)框包含五個(gè)字段:ID、Color、Logic、Float、Mix,每個(gè)字段包含3個(gè)元素。原始數(shù)據(jù)框構(gòu)造完畢后,我們將其復(fù)制到數(shù)據(jù)框simpleData中,之后所有的操作都在simpleData上進(jìn)行。值得一提的是,每開始一輪新的操作,將重置simpleData中的元素為simpleData_o,simpleData_o中的元素如圖1-5所示。圖1-5simpleData_o中的元素#更改前兩列的名稱simpleData<-simpleData_onames(simpleData)<-c("NewID","NewColor")simpleData輸出:NewIDNewColorNANANA11redTRUE1.5-31.022blueTRUE2.44.533yellowFALSE3.6-6.0下面展示了如何更改數(shù)據(jù)框中列的名稱。在沒有其他條件的情況下,程序?qū)牡谝涣虚_始改名,直到用完提供的名稱。#更改列Logic的名稱simpleData<-simpleData_ocolnames(simpleData)[colnames(simpleData)=="Logic"]<-"NewLogic"simpleData輸出:IDColorNewLogicFloatMix11redTRUE1.5-31.022blueTRUE2.44.533yellowFALSE3.6-6.0下面展示了如何通過使用列名稱來標(biāo)識(shí)將要被更改名稱的列。以下代碼將數(shù)據(jù)框中名為L(zhǎng)ogic的字段重命名為NewLogic。變量的重命名#更改第4列的名稱simpleData<-simpleData_onames(simpleData)[4]<-"NewFloat"simpleData輸出:IDColorLogicNewFloatMix11redTRUE1.5-31.022blueTRUE2.44.533yellowFALSE3.6-6.0下面展示了如何使用列號(hào)來標(biāo)識(shí)將要被更改名稱的列。以下代碼將數(shù)據(jù)框中的第4列重命名為NewFloat。在實(shí)際使用的過程中,應(yīng)盡量避免使用列號(hào)標(biāo)識(shí)改名這種方法。因?yàn)槿绻械捻樞虬l(fā)生更改,它將錯(cuò)誤地改變列的名稱。變量的重命名數(shù)字的四舍五入是一種常見的數(shù)據(jù)處理方式,在R語(yǔ)言中主要通過round()函數(shù)實(shí)現(xiàn)這一功能,其語(yǔ)法如下:數(shù)字的四舍五入round(x,digits)其中,x為待舍入的數(shù),digits用于指定四舍五入保留的小數(shù)位數(shù)。我們將使用之前構(gòu)造過的數(shù)據(jù)框simpleData進(jìn)行操作。第一個(gè)示例將數(shù)據(jù)框simpleData中的Float字段的數(shù)字四舍五入到整數(shù)位,并將四舍五入的數(shù)字保存回同一字段。round()函數(shù)如果未指定小數(shù)位數(shù),則默認(rèn)四舍五入到整數(shù)位。#數(shù)字的四舍五入simpleData<-simpleData_osimpleData$Float<-round(simpleData$Float)simpleData輸出:IDColorLogicFloatMix11redTRUE2-31.022blueTRUE24.533yellowFALSE4-6.0simpleData$Color<-round(simpleData$Color)輸出:Errorinround(simpleData$Color):數(shù)學(xué)函數(shù)中用了非數(shù)值參數(shù)數(shù)字的四舍五入我們通常會(huì)將舍入后的數(shù)值保存在新的字段中,保留原始數(shù)據(jù)以供以后使用。下面的這段代碼是正確的。#保留舍入前的原始數(shù)據(jù)simpleData<-simpleData_osimpleData$FloatRounded<-round(simpleData$Float)simpleData輸出:IDColorLogicFloatMixFloatRounded11redTRUE1.5-31.0222blueTRUE2.44.5233yellowFALSE3.6-6.04#指定要舍入的小數(shù)位數(shù)simpleData<-simpleData_osimpleData$FloatRounded<-round(simpleData$Float,0)simpleData輸出:IDColorLogicFloatMixFloatRounded11redTRUE1.5-31.0222blueTRUE2.44.5233yellowFALSE3.6-6.04下面展示了如何指定要舍入的小數(shù)位數(shù)。子集數(shù)據(jù)R語(yǔ)言具有強(qiáng)大的索引功能來訪問對(duì)象元素,這些特征可用于選擇和排除變量及觀察值。R語(yǔ)言中通過使用符號(hào)“[]”指定向量、矩陣、數(shù)組或數(shù)據(jù)框內(nèi)單個(gè)元素的索引或名稱,從而實(shí)現(xiàn)訪問這些元素的目的。#訪問simpleData第2行第4列的元素simpleData<-simpleData_osimpleData[2,4]輸出:[1]2.4#訪問simpleData第2行Logic列的元素simpleData[2,"Logic"]輸出:[1]TRUE#訪問simpleData中Mix列的元素simpleData[,"Mix"]輸出:[1]-31.04.5-6.0#通過數(shù)值向量訪問1-3列simpleData[,c(1:3)]輸出:IDColorLogic11redTRUE22blueTRUE33yellowFALSE#通過邏輯向量訪問1、3、4列simpleData[,c(T,F,T,T)]輸出:IDLogicFloatMix11TRUE1.5-31.022TRUE2.44.533FALSE3.6-6.0#通過名稱訪問第5列simpleData$Mix輸出:[1]-31.04.5-6.0#在邏輯向量中比較結(jié)果simpleData$Color=="blue"輸出:[1]FALSETRUEFALSE#訪問字段Float中元素值大于2的行simpleData[simpleData$Float>2,]輸出:IDColorLogicFloatMix22blueTRUE2.44.533yellowFALSE3.6-6.0子集數(shù)據(jù)#保留字段ID、Float、Mix中的數(shù)據(jù)partVars<-c("ID","Float","Mix")simpleDataPart1<-simpleData[partVars]simpleDataPart1輸出:IDFloatMix111.5-31.0222.44.5333.6-6.0#保留第1和第3-5個(gè)字段的數(shù)據(jù)simpleDataPart2<-simpleData[c(1,3:5)]simpleDataPart2輸出:IDLogicFloatMix11TRUE1.5-31.022TRUE2.44.533FALSE3.6-6.0#刪除字段Float、Mix中的數(shù)據(jù)simpleData$Float<-simpleData$Mix<-NULLsimpleData輸出:IDColorLogic11redTRUE22blueTRUE33yellowFALSE#排除字段ID、Float、Mix中的數(shù)據(jù)partVars2<-names(simpleData)%in%c("ID","Float","Mix")simpleDataPart3<-simpleData[!partVars2]simpleDataPart3輸出:ColorLogic1redTRUE2blueTRUE3yellowFALSE#排除第2和第4個(gè)字段的數(shù)據(jù)simpleDataPart4<-simpleData[c(-2,-4)]simpleDataPart4輸出:IDLogicMix11TRUE-31.022TRUE4.533FALSE-6.0子集數(shù)據(jù)#保留schoolData中前五行觀察值schoolData<-schoolData_oschoolDataPart1<-schoolData[1:5,]schoolDataPart1輸出:IDGradeStatus111open223open334close442close555open#上述的另一種方式attach(schoolData)schoolDataPart3<-schoolData[which(Grade>2&Status=="open"),]detach(schoolData)schoolDataPart3輸出:IDGradeStatus223open555open#保留schoolData中Grade值大于2且Status值為open的觀察值schoolDataPart2<-schoolData[which(schoolData$Grade>2&schoolData$Status=="open"),]schoolDataPart2輸出:IDGradeStatus223open555open子集數(shù)據(jù)我們?cè)诒A糇兞亢陀^察值時(shí),也可以運(yùn)用子集函數(shù)subset(),該函數(shù)是保留變量和觀察值的最簡(jiǎn)單的方式之一。下面的例子中,我們通過subset()函數(shù)找出數(shù)據(jù)框schoolData中的Grade字段大于3或者Status字段為close的行,并保存相應(yīng)的ID字段中的元素。#使用subset()函數(shù)schoolDataPart4<-subset(schoolData,Grade>3|Status=="close",select=c(ID))schoolDataPart4輸出:ID3344556688#使用subset()函數(shù)schoolDataPart5<-subset(schoolData,Grade>3|Status=="close",select=c(ID:Status))schoolDataPart5輸出:IDGradeStatus334close442close555open665close885close隨機(jī)抽樣從總體中選擇樣本的方式有很多,其中常用的一種就是隨機(jī)抽樣。在R語(yǔ)言中,通過sample()函數(shù)可以模擬隨機(jī)抽樣過程,其語(yǔ)法如下:sample(x,size,replace=FALSE,prob=NULL)#從1-50中隨機(jī)抽取10個(gè)數(shù)sample(1:50,10)輸出:[1]18811342173630312#從schoolDataPart6中隨機(jī)抽取5行數(shù)據(jù)schoolDataPart6<-schoolData[sample(1:nrow(schoolData),5,replace=FALSE),]schoolDataPart6輸出:I

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論