版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、R語言簡介R語言是用于統(tǒng)計(jì)分析,圖形表示報(bào)告的編程語言和軟件環(huán)境。R語言最早是由新西蘭奧克蘭大學(xué)的Ross Ihaka和Robert Gentleman創(chuàng)建的,目前由R Development Core Team開發(fā)和維護(hù)。R是一套由數(shù)據(jù)操作、計(jì)算和圖形展示功能整合而成的套件。包括:有效的數(shù)據(jù)存儲和處理功能,一套完整的數(shù)組(特別是矩陣)計(jì)算操作符,擁有完整體系的數(shù)據(jù)分析工具,為數(shù)據(jù)分析和顯示提供的強(qiáng)大圖形功能 R語言的特點(diǎn)1簡單有效2功能強(qiáng)大3軟件容易擴(kuò)展4強(qiáng)大的社區(qū)支持R語言是一個開源的語言,可以在互聯(lián)網(wǎng)上下載安裝使用。打開R語言官網(wǎng)(/bin/windows/base/)頁面界面就是R語言
2、的最主要交互界面,也是運(yùn)行、調(diào)試大部分代碼的地方,這里要注意的是,界面中每行最開始的符號表示在此輸入代碼,輸入代碼之后,然后按Enter鍵執(zhí)行代碼,代碼運(yùn)行后,結(jié)果將會在代碼的下一行中顯示出來。直接運(yùn)行代碼 該例代碼如下: print(Hello World)在R中print()函數(shù)將指定字符串輸出到控制臺,并在執(zhí)行函數(shù)后,以“數(shù)字”形式顯示運(yùn)行結(jié)果。當(dāng)顯示結(jié)果有多行時(shí),“數(shù)字”會指明各返回值是第幾個。通過程序腳本來運(yùn)行 在R中查看幫助此外,用戶也可以在“”后輸入命令來查看幫助。在R中,在?后輸入待查的命令,或者以“help(命令)”形式輸入,都可以查看對應(yīng)命令的幫助。在控制臺中輸入命令exa
3、mple(persp),即可自動運(yùn)行R中的三維圖像繪制函數(shù)perspR語言的包R是開源的軟件工具,很多R語言用戶和愛好者都會擴(kuò)展R的功能模塊,我們把這些模塊稱為包。包是R函數(shù)、數(shù)據(jù)、預(yù)編譯代碼以一種定義完善的格式組成的集合,而在計(jì)算機(jī)上存儲包的目錄稱為庫(library)。在R中擁有數(shù)量巨大的包,這些包橫跨各個領(lǐng)域。值得注意的是:R自帶了一系列默認(rèn)包(包括base、datasets、utils、grDevices、graphics、stats以及methods),它們提供了種類繁多的默認(rèn)函數(shù)和數(shù)據(jù)集,人們無需下載即可使用。 .libPaths()1 D:/Program Files/R/R-4
4、.0.2/library search()1 .GlobalEnv package:stats package:graphics 4 package:grDevices package:utils package:datasets 7 package:methods Autoloads package:base 在R語言中有許多R函數(shù)可以用來管理包。第一次安裝一個包,使用命令install.packages()即可。在R語言中包的安裝是指從某個CRAN鏡像站點(diǎn)下載它并將其放入庫中的過程。要在R會話中使用它,還需要使用library()命令載入這個包。數(shù)據(jù)類型與數(shù)據(jù)對象R語言中的數(shù)據(jù)對象十分豐富
5、,本章主要講述R語言中的各種數(shù)據(jù)對象定義及使用的基本方法。數(shù)據(jù)類型在每種編程語言和不同的數(shù)據(jù)庫中都有不同的數(shù)據(jù)類型。通??梢愿鶕?jù)數(shù)據(jù)類型的特點(diǎn)將數(shù)據(jù)劃分為不同的類型,如原始類型、多元組、記錄單元、代數(shù)數(shù)據(jù)類型、抽象數(shù)據(jù)類型、參考類型以及函數(shù)類型等。在R中輸出基本的數(shù)據(jù)類型 n print(class(n)1 numeric a print(class(a)1 logical b print(class(b)1 character j print(class(j)1 complex在R中查看數(shù)據(jù)的屬性。 j print(class(j)1 complex print(cat(j)3+2iNULL
6、 變量與標(biāo)量變量是計(jì)算機(jī)語言中能儲存計(jì)算結(jié)果或能表示值的抽象概念。變量可以保存程序運(yùn)行時(shí)用戶輸入的數(shù)據(jù)、特定運(yùn)算的結(jié)果以及要在窗體上顯示的一段數(shù)據(jù)等。在R語言中有效的變量名稱由字母,數(shù)字和點(diǎn)或下劃線字符組成。 變量名以字母或不以數(shù)字后跟的點(diǎn)開頭,并且緊隨其后的字符是不能是數(shù)字。如a、welcome、a1、x2、.x 都是合法的命名。在R中對變量賦值。 x y x1 1 y1 2在R中對變量賦值,并輸出最大值。 max(x x1 1 2 3 4 5標(biāo)量R基本數(shù)據(jù)類型是向量,而標(biāo)量是指長度為1的向量,即長度為1的數(shù)組。因此標(biāo)量只是向量的一種特例,并且以單元素向量的形式出現(xiàn)。使用函數(shù)print()輸
7、出數(shù)值。 a b c print(c)1 3在R中輸出字符串。 a print(a)1 Hello World typeof(a)1 character在R中輸出邏輯類型 a b typeof(a)1 logical typeof(b)1 logical在R中輸出邏輯運(yùn)算。 TRUE&TRUE1 TRUE TRUE&FALSE1 FALSE TRUE|TRUE1 TRUE TRUE|FALSE1 TRUE !TRUE1 FALSE在R中判斷是否空值。 is.na(x)1 TRUE y is.na(y)1 FALSE R語言中的數(shù)據(jù)對象R的數(shù)據(jù)對象從結(jié)構(gòu)角度來看包括向量、矩陣、數(shù)組、列表、因子、
8、數(shù)據(jù)框 向量向量是用于存儲數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。在R中的向量類似于其他編程語言中常見的數(shù)組,只用于保存具有相同數(shù)據(jù)類型的數(shù)據(jù)。在R中創(chuàng)建向量。 x print(x)1 1 2 3 4 5 y print(y) 1 1 2 3 4 5 6 7 8 9 10 z print(z)NULL w print(w)在R中用seq()來創(chuàng)建向量。 s1 print(s1)1 1 3 5 7 9在R中用names x names(x) x owen alex messi 1 2 3在R中訪問向量元素。 x x11 a x21 b x31 c在R中獲取向量中的多個元素。 x xc(1,2)1
9、a b xc(1,3)1 a c在R中對向量進(jìn)行常見運(yùn)算。 x sum(x)1 45 max(x)1 9 min(x)1 1 mean(x)1 5 length(x)1 9 var(x)1 7.5 sd(x)1 2.738613 median(x)1 5 quantile(x) 0% 25% 50% 75% 100% 1 3 5 7 9 sort(x)1 1 2 3 4 5 6 7 8 9 rev(x)1 9 8 7 6 5 4 3 2 1矩陣在R語言中,矩陣(matrix)是將數(shù)據(jù)按行和列組織數(shù)據(jù)的一種數(shù)據(jù)對象,相當(dāng)于二維數(shù)組,可以用于描述二維的數(shù)據(jù)。與向量相似,矩陣的每個元素都擁有相同的數(shù)
10、據(jù)類型。在R語言中可以使用matrix()函數(shù)來創(chuàng)建矩陣,其語法格式如下:matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)參數(shù)含義如下:data:矩陣的元素,默認(rèn)為NA,即未給出元素值的話,各項(xiàng)為NA;nrow:矩陣的行數(shù),默認(rèn)為1;ncol:矩陣的列數(shù),默認(rèn)為1;byrow:元素是否按行填充,默認(rèn)按列;dimnames:以字符型向量表示的行名及列名。在R中創(chuàng)建矩陣。 matrix(c(1,2,3,4,5,6,7,8,9),nrow=3) ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9在R中
11、創(chuàng)建矩陣并命名。 x x ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9 dimnames(x) x b1 b2 b3a1 1 4 7a2 2 5 8a3 3 6 9在R中創(chuàng)建矩陣,并訪問矩陣。 x x ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9 x1,11 1 x1,21 4 x2,11 2 x2,31 8在R語言中,矩陣可與標(biāo)量或是其他矩陣進(jìn)行運(yùn)算。如定義某矩陣為A,某標(biāo)量為a,則A+x表示將矩陣的所有值與標(biāo)量相加。如定義某矩陣為A,另一矩陣為B,則A+B表示求矩陣A+B的和。如定義某矩陣為A,則使用函數(shù)t()可求出該矩陣的轉(zhuǎn)置矩陣。如定義某矩陣為A
12、,則使用函數(shù)solve()可求出該矩陣的逆矩陣。如定義某矩陣為A,則使用函數(shù)nrow()可求出該矩陣的行數(shù),使用函數(shù)ncol()可求出該矩陣的列數(shù)。在R中創(chuàng)建矩陣,并進(jìn)行矩陣的加減乘除運(yùn)算。 x x ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9 x+3 ,1 ,2 ,31, 4 7 102, 5 8 113, 6 9 12 x-3 ,1 ,2 ,31, -2 1 42, -1 2 53, 0 3 6 x*3 ,1 ,2 ,31, 3 12 212, 6 15 243, 9 18 27 x/3 ,1 ,2 ,31, 0.3333333 1.333333 2.3333332,
13、0.6666667 1.666667 2.6666673, 1.0000000 2.000000 3.000000數(shù)組在R語言中,可以認(rèn)為數(shù)組是矩陣的擴(kuò)展,它將矩陣擴(kuò)展到2維以上。如果給定的數(shù)組是1維的則相當(dāng)于向量,2維的相當(dāng)于矩陣。在R語言中可以使用array()函數(shù)創(chuàng)建。array()函數(shù)的語法格式如下所示:array( data = NA,dim = length(data),dimnames = NULL)在R中創(chuàng)建數(shù)組。 arr1 arr1 1 1 2 3 4 5 6 7 8 9 10 arr2 arr2 ,1 ,2 ,3 ,41, 1 4 7 102, 2 5 8 13, 3 6
14、9 2在R中訪問數(shù)組。 arr3 arr3, , 1 ,1 ,2 ,31, 1 4 72, 2 5 83, 3 6 9, , 2 ,1 ,2 ,31, 10 3 62, 1 4 73, 2 5 8, , 3 ,1 ,2 ,31, 9 2 52, 10 3 63, 1 4 7, , 4 ,1 ,2 ,31, 8 1 42, 9 2 53, 10 3 6列表列表是R語言中的是對象的集合。R語言中的列表與R語言中的向量、數(shù)組和矩陣不同,它的每個分量的數(shù)據(jù)類型可以是不同的。在R語言中可以使用list()函數(shù)來創(chuàng)建列表,其語法格式為:list(name1=value1, name2 = value2,.
15、)在R中創(chuàng)建列表。 (x (x x1$name1 owen messi dandy x2$score1 89 68 71 x11 owen messi dandy x21 89 68 71因子因子在R語言中可以用來表示名義型變量或有序變量。名義變量一般表示類別,如性別,種族等等。在R語言中可以使用factor()函數(shù)來創(chuàng)建因子變量。factor()函數(shù)的語法格式為:f a a1 x y z xLevels: x y z在R中創(chuàng)建因子并訪問因子。 a a1 x y z x wLevels: w x y z nlevels(a)1 4 levels(a)1 w x y z ordered(a)1
16、x y z x wLevels: w x y (d d d name sex score1 張宏 男 902 鄧蘭 女 853 劉濤 男 824 張峰 男 63 str(d)data.frame: 4 obs. of 3 variables: $ name : chr 張宏 鄧蘭 劉濤 張峰 $ sex : chr 男 女 男 男 $ score: num 90 85 82 63在R中對數(shù)據(jù)框進(jìn)行查看。 s s x1 12 23 34 45 56 67 78 89 910 10 head(s) x1 12 23 34 45 56 6 tail(s) x5 56 67 78 89 910 10R
17、語言中數(shù)據(jù)類型的轉(zhuǎn)換在R中判斷數(shù)據(jù)類型。 class(c(1,2,3)1 numeric class(c(hello)1 character class(matrix(c(1,2,3)1 matrix array在R中判斷數(shù)據(jù)類型并進(jìn)行轉(zhuǎn)換。 x is.character(x)1 TRUE as.factor(x)1 a b cLevels: a b c as.data.frame(x) x1 a2 b3 c as.matrix(x) ,11, a 2, b 3, c控制語句與函數(shù)現(xiàn)實(shí)世界中的很多事情,有時(shí)需要遵循一定的條件去執(zhí)行,有時(shí)需要反復(fù)執(zhí)行,只有滿足相應(yīng)的條件才能做相應(yīng)的事情,不同的條
18、件會執(zhí)行不同的操作。條件結(jié)構(gòu)R語言和大多數(shù)程序語言一樣都存在分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)兩種流程控制結(jié)構(gòu),通過if 語句和switch語句可以實(shí)現(xiàn)分支結(jié)構(gòu)控制語句。 條件表達(dá)式,也稱邏輯表達(dá)式,它是一種能夠計(jì)算出布爾值(布爾真值True或布爾假值False)的表達(dá)式。 6 = 71 FALSE FALSE = 01 TRUE FALSE & FALSE #取與運(yùn)算,若運(yùn)算符兩邊均為TRUE,則返回TRUE;否則,返回FALSE。1 FALSE eger(2.5)1 FALSE Truth %in% c(what,is,truth)1 FALSER語言中分支結(jié)構(gòu)控制語句中最基本的語句組就是if - els
19、e語句組。這組語句包含if語句,if-else語句和if-else if-else 語句。單一if語句一般用在程序中只有一個分支的情況下,它的語法結(jié)構(gòu)如下: if(條件表達(dá)式)程序體判斷一個數(shù)是否為正數(shù),如果為正數(shù)則輸出語句這個數(shù)是正數(shù)x 0) print(x是正數(shù)) if-else語句的語法結(jié)構(gòu)和if語句的語法結(jié)構(gòu)的區(qū)別只在于,如果if的條件表達(dá)式的判定是假,則運(yùn)行else中的程序體,它的語法結(jié)構(gòu)是: if(條件表達(dá)式)程序體1else 程序體2當(dāng)出現(xiàn)更多的分支時(shí),R語言可以使用if-else if-else語句,這里else if的個數(shù)需要通過程序的分支個數(shù)來確定,它的語法結(jié)構(gòu)是: if(
20、條件表達(dá)式)程序體1 else if(條件表達(dá)式2)程序體2else if(條件表達(dá)式n-1)程序體n-1 else 程序體nswitch語句R語言switch語句的基本語法如下: switch(表達(dá)式,實(shí)例1,實(shí)例2, )x switch(x, first, second, third, fourth)1 secondx print(x) 1 third循環(huán)結(jié)構(gòu)在R語言中for循環(huán)的語法結(jié)構(gòu)如下: for(循環(huán)變量 in 循環(huán)區(qū)間) 循環(huán)體使用for循環(huán)的使用,實(shí)現(xiàn)1至10的累加和。 sum for(n in 1:10) sum = sum +n print(sum)1 55while循環(huán)在
21、R語言中,while循環(huán)的語法結(jié)構(gòu)和其他語言的while循環(huán)的語法結(jié)構(gòu)相似,如下: while(條件表達(dá)式) 循環(huán)體while循環(huán)的語法結(jié)構(gòu)比較簡單,上例實(shí)現(xiàn)如下: sum i while( i = 10)sum = sum +ii print(sum)1 55break語句break語句的作用是,一旦其被調(diào)用,不論循環(huán)是否結(jié)束都會跳出循環(huán),需要注意的是,和return( )函數(shù)不同,return( )函數(shù)是結(jié)束該函數(shù),而break語句只會從循環(huán)中跳出使用break語句實(shí)現(xiàn)1至10之間整數(shù)的累加和,當(dāng)大于等于10時(shí)跳出循環(huán): sum i while( i =11) break;sum = su
22、m +ii print(sum)1 55repeat語句repeat是無限循環(huán)語句,并且會在達(dá)到循環(huán)條件后,使用break語句直接跳出循環(huán),其語法結(jié)構(gòu)如下: repeat 語句 if (條件表達(dá)式) break 函數(shù)R語言包含了豐富的內(nèi)部函數(shù),R語言的擴(kuò)展包也包含了大量的可實(shí)用函數(shù)。R語言中如何自定義函數(shù)。自定義函數(shù)的格式如下: 函數(shù)名 sum-function(n) s-0 for (i in 1:n) s sum(100) 1 5050返回值在R語言中,函數(shù)的返回值可以返回任何R對象,盡管返回值通常為列表形式。在程序中可以通過顯式調(diào)用return( )函數(shù),把一個值返回給主調(diào)函數(shù)。函數(shù)的參
23、數(shù)在R語言中,函數(shù)的參數(shù)值可以沒有,可以有一個,也可以有多個;參數(shù)值的類型可以是R語言的基本類型,也可以是函數(shù)。自定義一個函數(shù)實(shí)現(xiàn)三個數(shù)的相加,代碼如下: sum sum(100, 200, 500) #雖然參數(shù)a, c都有默認(rèn)值,此處對a,c重新賦值,b取值2001 2000 sum(100, 200) #參數(shù)c取默認(rèn)值1 2000 sum(a=100, b=200) #通過賦值的方式給a,b賦值,參數(shù)c取默認(rèn)值1 2000 sum(b=200, a=100) #通過賦值的方式給a,b賦值,可以不按順序1 2000sum(100, 200, 300) #參數(shù)a,c不取默認(rèn)值,重新賦值1 14
24、00程序的向量化實(shí)現(xiàn)在R語言中,采用顯示循環(huán)會涉及多次函數(shù)的調(diào)用和迭代,常常很耗費(fèi)時(shí)間。很多情況下循環(huán)和控制結(jié)構(gòu)可以通過向量化來實(shí)現(xiàn),可以有效提升速度將下列條件語句改用邏輯索引的向量化實(shí)現(xiàn)。 x y for (i in 1:length(x) if (xi = 2) yi - 0 else yi x y yx = 2 yx != 2 x x ,1 ,2 ,31, 1 5 92, 2 6 103, 3 7 114, 4 8 12 apply(x, 1, sum)1 15 18 21 24lapply( )函數(shù)lapply( )函數(shù)用來對列表、數(shù)據(jù)框等數(shù)據(jù)集進(jìn)行循環(huán),并返回和x長度同樣的列表作為結(jié)
25、果數(shù)據(jù)集,參數(shù)與apply( )函數(shù)的參數(shù)相同計(jì)算list中的每個key對應(yīng)的數(shù)據(jù)的分位數(shù)。代碼如下: #構(gòu)建一個1ist數(shù)據(jù)集x,分別包括a,b,c三個key值。 x lapply(x, quantile)$a 0% 25% 50% 75% 100% 1.00 3.25 5.50 7.75 10.00 $b 0% 25% 50% 75% 100% 0.04978707 0.25160736 1.00000000 5.05366896 20.08553692 $c 0% 25% 50% 75% 100% 0.0 0.0 0.5 1.0 1.0sapply( )函數(shù)sapply( )函數(shù)與lap
26、ply( )函數(shù)其實(shí)是一樣的,只是返回的結(jié)果是一個向量或者是一個矩陣,當(dāng)無法將一個結(jié)果簡化為矩陣時(shí),就會返回一個列表。sapply( )函數(shù)的語法格式如下: sapply(X,F(xiàn)UN,, simplify=TRUE, USE.NAMES=TRUE)sapply( )函數(shù)使用如下所示: x x$a1 1 2 3 4 5$b1 -0.55825260 -0.64523388 0.65826347 -0.02316176 1.07831357$c1 0.10549647 -0.01716549 1.67225328 0.26572079 0.89511642 sapply(x, mean) a b
27、c 3.0000000 0.1019858 0.5842843vapply()函數(shù)vapply函數(shù)就是sapply函數(shù)的升級版本,vapply函數(shù)通過付加一個參數(shù)來設(shè)定每次返回值的模板。與sapply()類似,vapply()也會對apply結(jié)果進(jìn)行簡化tapply()函數(shù)tapply()函數(shù)允許根據(jù)某些變量的值,把原始數(shù)據(jù)分割為若干組,然后對每一組數(shù)據(jù)應(yīng)用特定的操作。mapply( )函數(shù)多參數(shù)版本的sapply()。第一次計(jì)算傳入各組向量的第一個元素到FUN,進(jìn)行結(jié)算得到結(jié)果;第二次傳入各組向量的第二個元素,得到結(jié)果;第三次傳入各組向量的第三個元素以此類推。rapply( )函數(shù)rappl
28、y( )函數(shù)是lapply( )函數(shù)的一個遞歸版本,它只負(fù)責(zé)處理列表(list)類型數(shù)據(jù),對列表中的每個元素進(jìn)行遞歸遍歷,如果list包括子元素則繼續(xù)遍歷。數(shù)據(jù)的讀寫與預(yù)處理在真實(shí)的數(shù)據(jù)分析場景中,獲取到的原始數(shù)據(jù)一般都存在有缺失值、重復(fù)值、異常值或格式等等問題,有必要對數(shù)據(jù)進(jìn)行預(yù)處理,才能進(jìn)行下一步的數(shù)據(jù)分析工作。R語言基本的輸入輸出功能主要包括三種形式: 鍵盤錄入和屏幕輸出、文本格式的輸入輸出、自有二進(jìn)制格式的輸入輸出。工作目錄是數(shù)據(jù)分析時(shí)輸入輸出的一個默認(rèn)文件夾。在設(shè)置工作目錄之前,還需要確保所要設(shè)置的文件夾是否存在。這可以利用函數(shù)dir.exists( )來判斷文件夾是否存在,如不存在
29、,可以利用函數(shù)dir.create( )新建一個文件夾setwd(d:/R語言實(shí)訓(xùn)) #無法設(shè)置,可能是文件夾不存在Error in setwd(d:/R語言實(shí)訓(xùn)): cannot change working directorydir.exists(d:/R語言實(shí)訓(xùn),)#判斷文件夾是否存在1FALSEdir.create(d:/R語言實(shí)訓(xùn))#不存在的話,可以新建一個setwd(d:/R語言實(shí)訓(xùn)) #設(shè)置工作目錄getwd( ) #獲取當(dāng)前工作目錄1d:/R語言實(shí)訓(xùn)向量的輸入scan( )函數(shù)可以用于直接鍵盤錄入,以構(gòu)建一個向量,該函數(shù)也可以利用參數(shù)file直接讀取文件中的向量,如: x=1:
30、8write(x, data.txt) #將一個數(shù)值向量保存在文件data.txt中scan(data.txt)#利用scan( )函數(shù)將這個數(shù)值向量寫進(jìn)來Read 8 items112345678數(shù)據(jù)文件的讀取在數(shù)據(jù)分析中,數(shù)據(jù)經(jīng)常采用數(shù)據(jù)表的形式進(jìn)行存儲和計(jì)算,即每列代表一個變量,每行代表一個個體或一條記錄。矩陣和數(shù)據(jù)框從形式上看都是行列表,因此都能以數(shù)據(jù)表的形式進(jìn)行輸出,但寫入數(shù)據(jù)表文件時(shí),R語言會以數(shù)據(jù)框的形式寫入。set.seed(1)x= matrix(rnorm(12), 3)write.csv(x, data.csv) #輸出一個csv文件read.csv(data.csv)
31、X V1 V2 V3 V41 1 -0.6264538 1.5952808 0.4874291 -0.30538842 2 0.1836433 0.3295078 0.7383247 1.51178123 3 -0.8356286 -0.8204684 0.5757814 0.3898432如上所示,對于該文件,read.csv( )函數(shù)并不能自動識別行號,而將自動生成的行名作為一列寫了進(jìn)來。此時(shí),可以利用參數(shù)s指定第一列為行名,如: read.csv(data.csv, s=1) V1 V2 V3 V41 -0.6264538 1.5952808 0.4874291 -0.30538842
32、0.1836433 0.3295078 0.7383247 1.51178123 -0.8356286 -0.8204684 0.5757814 0.3898432R語言中read.table( )函數(shù)為基礎(chǔ)包自帶函數(shù),可以讀取文本數(shù)據(jù)和csv格式數(shù)據(jù)使用read.table函數(shù)讀取文件名為train.txt的文件 train library(readxl) read_excel(data.xlsx, sheet = 1)數(shù)據(jù)的輸出在數(shù)據(jù)分析的過程中,當(dāng)需要顯示某個變量的值時(shí),可以在命令提示符后直接鍵入變量的名稱,但在循環(huán)結(jié)構(gòu)中,必須使用函數(shù)對其進(jìn)行屏幕輸出。 for(i in 1:2) i#
33、在循環(huán)結(jié)構(gòu)中,僅使用變量名無法輸出變量的內(nèi)容 for(i in 1:2) print(i) #可以使用print( )函數(shù)指定輸出i的值1 11 2 for(i in 1:2) cat(i) #也可以使用cat( )函數(shù)指定輸出1的值12向量的輸出R語言可以使用write( )函數(shù)將一個向量輸出到文件中。此外,cat( )函數(shù)也可以利用參數(shù)file輸出向量。如下代碼所示:a=1:8write(x, data.txt) #將一個數(shù)值向量保存到文件data.txt中b=rep(c(T, F),each=4)write(y, data.txt,appends=T) #在文件末尾添加一個邏輯向量c=l
34、etters1:3write(z, data.txt,append=T) #在文件末尾再添加一個字符向量d=as, factor(rep(c(a,b),4)cat(因子向量包括兩個類別: a、br,file=data.txt,append=T)write(d, data.txt, append=T)#在文件末尾再添加一個因子向量數(shù)據(jù)文件的輸出 1) write.table()函數(shù)write.table()函數(shù)可以用來輸出CSV格式的文件,其語法格式如下: write.table(x, file = , append = FALSE, quote = TRUE, sep = , eol = n,
35、 na = NA, dec = ., s = TRUE, s = TRUE, qmethod = c(escape, double), fileEncoding = )set.seed(1)x=matrix(rnorm(12),3)write.csv(x,file=data.csv) #將矩陣x輸出到文件data.csv中寫入Excel文件本小節(jié)以包openxlsx為例,對xlsx格式文件的讀取進(jìn)行講解。在使用這個包之前,首先要用install.packages( )函數(shù)安裝這個包,命令如下: install.packages(openxlsx)write.xlsx( )函數(shù)將數(shù)據(jù)保存為xls
36、x格式,用法如下: datawrite.xlsx(data, data.xlsx) #將數(shù)據(jù)框data以xlsx格式進(jìn)行輸出如上所示,該函數(shù)將一個數(shù)據(jù)框變量保存為xlsx格式文件,并默認(rèn)保存在工作目錄下。這個文件只包含一個名稱為“Sheetl”的表。由于一個xlsx格式文件可以包含多個表,因此可以將多個不同結(jié)構(gòu)的數(shù)據(jù)保存在同一個文件的不同表中,如: ab=matrix(1:6, 2)c=1:3d=list(a, b, c)write.xlsx(d, data.xlsx, sheetName=letters1:3)工作空間的保存和加載save( )函數(shù)用于將數(shù)據(jù)保存為RData格式。在保存數(shù)據(jù)時(shí)
37、,該命令對于變量的類型沒有要求,可以保存任意類型的數(shù)據(jù),如: a=1: 10 #構(gòu)建一個向量b=matrix(1: 6,2)#構(gòu)建一個矩陣c-data.frame(x1=1: 3, x2=letters1: 3)構(gòu)建一個數(shù)據(jù)框d=list(a, b, c)#構(gòu)建一個列表save(a, b, c, d, file=sample.rdata)#將以上變量保存到文件sample.rdata中變量的預(yù)處理 在R語言中,數(shù)據(jù)集常常使用數(shù)據(jù)框的形式表示。如下代碼所示: hospital patients costs df dfhospital patients costs1 New York 150 3.
38、12 California 350 2.52. 改變變量的名稱如下代碼所示:df$costs_euro df$costs df$patients dfhospital patients costs_euro1 New York 100 3.12 California 300 2.53. 定義缺失值如下代碼所示:# 將年齡顯示為99歲的定義為缺失值 df$degreedf $ patients = 300 - NA # 某一變量篩選條件 variablecondition df$degreedf $ patients = 200 df$degreedf $ patients 200 df hos
39、pital patients costs_euro degree1 New York 100 3.1 mild2 California 300 2.5 serious# degree為新建變量,且為滿足patient的邏輯篩選條件下建立的新變量變量重命名在R語言中,變量的重命名常用的方法,分別是利用names( ), colnames( ), rownames( )等函數(shù)進(jìn)行修改,這些函數(shù)是在原數(shù)據(jù)集中修改變量名。變量類型的轉(zhuǎn)換R語言中,可以使用以下函數(shù)判斷變量類型和對變量類型進(jìn)行轉(zhuǎn)換:is/as.numeric( ) 是否/轉(zhuǎn)換為數(shù)值型is/as.character( ) 是否/轉(zhuǎn)換為字符型
40、is/as.vector( ) 是否/轉(zhuǎn)換為向量is/as.matrix( ) 是否/轉(zhuǎn)換為矩陣is/as.data.frame( ) 是否/轉(zhuǎn)換為數(shù)據(jù)框is/as. factor ( ) 是否/轉(zhuǎn)換為因子is/as.logical( ) 是否/轉(zhuǎn)換為邏輯型字符串的處理R語言中分割字符串是使用strsplit( )函數(shù)來實(shí)現(xiàn)的,strsplit( ) 函數(shù)是一個拆分函數(shù),該函數(shù)可以使用正則表達(dá)式來對字符串進(jìn)行匹配拆分。它的語法結(jié)構(gòu)是: strsplit(x, split, fixed= FALSE, perl= FALSE, useBytes= FALSE)對字符串It requires no
41、n-string elements to be converted to strings.中間的空格進(jìn)行拆分。第一種拆分方式的代碼如下: x y y11 It requires non-string elements to 6 be converted to strings. 第二種拆分方式的代碼如下: #用NULL串拆分 y y1 1 I t r e q u i r e s n o n - s t r i n g23 e l e m e n t s t o b e c o n v e r45 t e d t o s t r i n g s .第三種拆分方式的代碼如下: y y11 It re
42、quires non-string elements to be converted to strings. 字符串拼接將c(a,b, c, d, e)和c(A, B, C, D,E)拼接,拼接方式為:(1)直接拼接;(2)用空串拼接;(1)用拼接。代碼如下: x y paste(x, y) #拼接方式1, 將兩個字符串向量拼接,sep取默認(rèn)值1 a A b B c C d D e E paste(x, y, sep= ) #使用空格進(jìn)行拼接,結(jié)果與拼接方式1相同1 a A b B c C d D e E paste(x, y, sep=) #拼接方式2, 將兩個字符串向量用空串拼接1 aA
43、bB cC dD eE paste(x, y, sep=) #拼接方式3, 將兩個字符串向量用拼接1 aA bB cC dD eE字符串長度計(jì)算計(jì)算字符串長度可以用nchar( )函數(shù)來實(shí)現(xiàn)。判斷c(asfef , stuff.blah.yech, year-month-day, NA, , ddd.ff)中每個字符串的長度。代碼如下: x nchar(x)1 6 15 15 NA 0 8 nzchar(x)1 TRUE TRUE TRUE TRUE FALSE TRUE字符串截取截取字符串通常使用substr( )函數(shù)和substring( )函數(shù),兩個函數(shù)的功能幾乎是相同的,只是參數(shù)設(shè)置不
44、同。這兩個函數(shù)的語法結(jié)構(gòu)如下: substr(x, start, stop)substring(text, first, last = 1000000L)substr(x, start, stop) - valuesubstring(text, first, last = 1000000L) sprintf (Hello : %s, Word)1 Hello : Word使用stringr包處理字符串使用stringr包之前,先需要安裝和加載stringr包。install.packges(stringr)library(stringr)查看字符向量c(ssss,str_str)中是否包含有字
45、符串str,如果不包含,則在相應(yīng)位置輸出空值;如果包含,則在相應(yīng)位置返回該字符串。str_match(c(ssss,str_str),str),1 1, NA2, str日期變量的處理和轉(zhuǎn)換在R語言的實(shí)際項(xiàng)目分析中,時(shí)間是一個重要的數(shù)據(jù),在很多數(shù)據(jù)分析項(xiàng)目中時(shí)間序列是重要的分析指標(biāo),本節(jié)講述R語言是如何處理日期和時(shí)間的。程序員在編程中遇到的第一個與時(shí)間相關(guān)的問題大多是如何取系統(tǒng)時(shí)間,R語言取系統(tǒng)時(shí)間常使用的函數(shù)是date( )函數(shù)、Sys.Date( )函數(shù)和Sys.time( )函數(shù)。 date ()1 Sat Jan 09 12:13:29 2021 class (date ()1 cha
46、racter在R語言中,將文本轉(zhuǎn)換成日期和時(shí)間通常使用as.Date( )函數(shù)、as.POSIXct( )函數(shù)、as.POSIXlt( )函數(shù)、strptime( )函數(shù)。下面是這幾個函數(shù)的語法結(jié)構(gòu): as.Date(x, format)as.POSIXct(x. format. tz=, .)as.POSIXIt(x. format, tz=, .)strptime(x, format, tz=)字符串類型的數(shù)據(jù)可以轉(zhuǎn)換成時(shí)間類型的,當(dāng)然時(shí)間類型的數(shù)據(jù)也可以轉(zhuǎn)化為字符串類型的,常用的函數(shù)有format( )函數(shù)和strftime( )函數(shù),它們的語法格式如下: format(x,format
47、,tz=)strftime(x,format,tz=)清洗重復(fù)數(shù)據(jù)duplicated( )函數(shù)會在數(shù)值第一次出現(xiàn)的時(shí)候返回FAL.SE,在數(shù)值重復(fù)出現(xiàn)的時(shí)候返回TRUE,代碼如下: x duplicated(x)1 FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE經(jīng)過查詢,向量x中有TRUE值,說明x中包含重復(fù)值。去除重復(fù)值的第二個步驟是查找重復(fù)值的索引值,該操作使用which( )函數(shù)來完成,代碼如下: x y which (y) #返回重復(fù)值的索引位置1 4 5 8 9去除重復(fù)值的主要思想就是把上面找到的索引值以外的數(shù)據(jù)從目標(biāo)數(shù)據(jù)中取出并
48、放到一個新的對象中。 x y new new1 5 6 7 8 9缺失數(shù)據(jù)處理R語言中,NA為Not Available的縮寫,代表缺失值,NaN為Not a Number的縮寫,代表不可能值,Inf和-Inf代表正無窮和負(fù)無窮。函數(shù) is.na( )、 is.nan( )和is.infinite( )可以分別用來識別缺失值、不可能值和無窮值。每個返回結(jié)果都是TRUE或FALSE。 y is.na(y)1 FALSE FALSE FALSE TRUE TRUE is.nan(y)1 FALSE FALSE FALSE TRUE FALSE is.infinite(y)1 FALSE FALSE
49、 TRUE FALSE FALSE缺失數(shù)據(jù)的處理一般來說,缺失值的處理包括兩個步驟,即缺失數(shù)據(jù)的識別和缺失值處理。在R語言中缺失值通常以NA表示,可以使用函數(shù)is.na( )判斷缺失值是否存在,另外函數(shù)complete.cases( )可識別樣本數(shù)據(jù)是否完整從而判斷缺失情況。在對是否存在缺失值進(jìn)行判斷之后需要進(jìn)行缺失值處理,常用的方法有刪除法、替換法、插補(bǔ)法等。使用均值替換法對缺失數(shù)據(jù)進(jìn)行填充 data data2:3, 5 data ,1 ,2 ,3 ,4 ,51, 0 -1 -1 -4 -22, 7 -5 -7 3 NA3, -5 4 -3 2 NA4, -3 0 4 3 1 datais
50、.na(data) data ,1 ,2 ,3 ,4 ,51, 0 -1 -1 -4 -2.00000002, 7 -5 -7 3 -0.38888893, -5 4 -3 2 -0.38888894, -3 0 4 3 1.0000000異常值識別和處理 異常值指的是樣本中的極少數(shù)樣本點(diǎn),其數(shù)值明顯偏離于所屬樣本的絕大部分觀測值,所以也稱為離群點(diǎn)。利用3 原則過濾數(shù)據(jù)中的異常值如下代碼所示: data daMean daSD cutoff outindex - datacutoff2 outindex 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE F
51、ALSE FALSE FALSE FALSE FALSE 13 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 25 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 37 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 49 FALSE FALSE FALSE FALSE FALSE FALSE FALSE F
52、ALSE FALSE FALSE FALSE FALSE 61 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 73 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 85 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 97 FALSE FALSE FALSE FALSE FALSE FALSE FALSE F
53、ALSE FALSE FALSE FALSE FALSE109 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE121 FALSE FALSE FALSE TRUE根據(jù)箱型圖檢測異常值boxplot.stats()函數(shù)用于單變量異常值檢測的示例如下所示: set.seed(3147) x boxplot.stats(x) $out #輸出異常值1 -3.456658 boxplot(x) #繪制箱線圖數(shù)據(jù)集的合并與拆分cbind( )函數(shù)是根據(jù)列進(jìn)行合并,即疊加所有列,m列的矩陣與n列的矩陣cbind(
54、 )最后變成m+n列,合并前提: cbind(a, c)中矩陣a、c的行數(shù)必需相符。rbind( )函數(shù)是根據(jù)行進(jìn)行合并,就是行的疊加,m行的矩陣與n行的矩陣rbind( )最后變成m+n行,合并前提: rbind(a, c)中矩陣a、c的列數(shù)必需相符。R語言基本圖形R語言的基本圖形是由一些基本繪圖函數(shù)來實(shí)現(xiàn)的,這些繪圖函數(shù)通常會生成一個默認(rèn)而且相對完整的圖形,這些圖形基本可以滿足實(shí)際應(yīng)用的需求。散點(diǎn)圖 x y plot(x, y, xlab = 廣告投入(萬元), ylab = 銷售額(百萬元), main = 廣告投入與銷售額的關(guān)系)plot(x, y, xlab = 廣告投入(萬元),
55、ylab = 銷售額(百萬元), main = 廣告投入與銷售額的關(guān)系, pch=16, col=red, cex=2) # pch為指定繪制點(diǎn)時(shí)使用的符號,不同的數(shù)值會顯示不同的符號。取值16表示實(shí)心圓點(diǎn),cex為指定符號的大小。 點(diǎn)圖sale1months dotchart(sale1, labels= months, main=每個月的銷售額 , color = red)折線圖 sale1months plot(sale1, type = o, main = 銷售額趨勢圖, col = red, xlab =月份, ylab =銷售額) # 折線圖如下左圖所示sale2lines(sal
56、e2, type = o, col = blue) # lines函數(shù)是在原有圖形上新繪制一條線。曲線圖 curve(sin(x), -2 * pi, 2 * pi, type = o) curve(sin(x), -2 * pi, 2 * pi, n=30, type = p) #繪制點(diǎn)的數(shù)量個數(shù)為30條形圖H1= c(28, 83, 58) #表示銷售額,單位為百萬元cols= c(red,orange,green)barplot(H1, main=銷售額, col= cols, xlab = 地區(qū), ylab = 銷售額, names.arg=c(北京,上海,廣州)barplot(H1,
57、 main=銷售額, horiz=T, col= cols, xlab = 地區(qū), ylab = 銷售額, names.arg=c(北京,上海,廣州)餅圖 sale= c(1, 2, 4, 8) #每季度對應(yīng)的銷售額情況,單位為百萬元 names = c(春季, 夏季, 秋季, 冬季) cols = c(brown,orange,red,green) #指定每季度對應(yīng)的顏色 pie(sale, labels=names, main = 各季度銷售額情況) #繪制餅圖,系統(tǒng)自動分配顏色 percent = paste(round(100* sale/sum(sale), %) #計(jì)算每季度銷售額
58、的占比情況 percent 1 7 % 13 % 27 % 53 % pie(info, labels=percent, main = 各季度銷售額占比情況, col=cols) # 繪制餅圖,按指定顏色著色,并按每季度銷售額計(jì)算全年的占比情況 legend(topright, names, cex=0.8, fill=cols) # 添加圖例標(biāo)注箱線圖h boxplot(h, col = orange)直方圖 v hist(v, main=學(xué)生成績分布, xlab = 分?jǐn)?shù), ylab=學(xué)生數(shù), col = green,border = brown)hist(v, main=學(xué)生成績分布,
59、xlab = 分?jǐn)?shù), ylab=學(xué)生數(shù), col = green, border = brown, xlim = c(68,90), ylim = c(0.5, 3.5), breaks = 5) #使用xlim和ylim參數(shù),可以指定X軸和Y軸允許的值的范圍。每個條的寬度可以通過使用斷點(diǎn)來決定。R語言圖形修飾圖形可以看成是由點(diǎn)、線、文本和多邊形(填充區(qū)域)等不同元素組成的,在原有圖形上新添加不同的元素,就會得到不同的效果。使用不同lty和pch參數(shù)繪制一月至五月的銷售額趨勢圖。sale1plot(sale1, type=b, lty=3, lwd=5, pch=21, cex=2, main
60、 = 銷售額趨勢圖) plot(sale1, type=b, lty=6, lwd=5, pch=3, cex=2, main = 銷售額趨勢圖)繪制北上廣地區(qū)銷售額的條形圖,并使用字體相關(guān)參數(shù)創(chuàng)建斜體、1.5倍于默認(rèn)文本大小的坐標(biāo)軸標(biāo)簽(名稱),以及粗斜體、2倍于默認(rèn)文本大小的標(biāo)題。 H1= c(28, 83, 58) #表示銷售額,單位為百萬元 cols= c(red,orange,green) barplot(H1, main=北上廣地區(qū)銷售額, col= cols, xlab = 地區(qū), ylab = 銷售額, names.arg=c(北京,上海,廣州), font.lab=3, ce
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高粱收購合同模板
- 出口貨物海上運(yùn)輸合同模板
- 醫(yī)美采購合同模板
- 門租房合同模板
- 奢侈品合同模板
- 房屋改造翻新合同模板
- 電磁鍋爐安裝合同范本(2篇)
- 承包電纜鋪設(shè)合同模板
- 模特短拍攝合同模板
- 鋪裝路面清洗合同模板
- GB/T 35005-2018集成電路倒裝焊試驗(yàn)方法
- 新聞傳播與名譽(yù)權(quán)案例討論
- 優(yōu)化完善法律制度規(guī)定解讀2021年新修訂《軍事設(shè)施保護(hù)法》PPT教學(xué)講座
- 小學(xué)三年級下冊綜合實(shí)踐活動.奇妙的水果-(16張)ppt
- 大魚海棠課件
- 擠出機(jī)螺桿組合原理和應(yīng)用教育課件
- 業(yè)績考核薪酬激勵課件
- 如何構(gòu)建德育課程體系
- 國開作業(yè)《數(shù)字電子電路》實(shí)驗(yàn)1邏輯門電路功能測試參考69
- 廣州市建設(shè)項(xiàng)目代建合同穗政合同示范文本004號
- 常用姓氏筆畫表及按姓氏筆畫排序原則
評論
0/150
提交評論