R語言基礎與應用完教學課件完整版電子教案_第1頁
R語言基礎與應用完教學課件完整版電子教案_第2頁
R語言基礎與應用完教學課件完整版電子教案_第3頁
R語言基礎與應用完教學課件完整版電子教案_第4頁
R語言基礎與應用完教學課件完整版電子教案_第5頁
已閱讀5頁,還剩304頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、R語言簡介R語言是用于統(tǒng)計分析,圖形表示報告的編程語言和軟件環(huán)境。R語言最早是由新西蘭奧克蘭大學的Ross Ihaka和Robert Gentleman創(chuàng)建的,目前由R Development Core Team開發(fā)和維護。R是一套由數(shù)據(jù)操作、計算和圖形展示功能整合而成的套件。包括:有效的數(shù)據(jù)存儲和處理功能,一套完整的數(shù)組(特別是矩陣)計算操作符,擁有完整體系的數(shù)據(jù)分析工具,為數(shù)據(jù)分析和顯示提供的強大圖形功能 R語言的特點1簡單有效2功能強大3軟件容易擴展4強大的社區(qū)支持R語言是一個開源的語言,可以在互聯(lián)網(wǎng)上下載安裝使用。打開R語言官網(wǎng)(/bin/windows/base/)頁面界面就是R語言

2、的最主要交互界面,也是運行、調試大部分代碼的地方,這里要注意的是,界面中每行最開始的符號表示在此輸入代碼,輸入代碼之后,然后按Enter鍵執(zhí)行代碼,代碼運行后,結果將會在代碼的下一行中顯示出來。直接運行代碼 該例代碼如下: print(Hello World)在R中print()函數(shù)將指定字符串輸出到控制臺,并在執(zhí)行函數(shù)后,以“數(shù)字”形式顯示運行結果。當顯示結果有多行時,“數(shù)字”會指明各返回值是第幾個。通過程序腳本來運行 在R中查看幫助此外,用戶也可以在“”后輸入命令來查看幫助。在R中,在?后輸入待查的命令,或者以“help(命令)”形式輸入,都可以查看對應命令的幫助。在控制臺中輸入命令exa

3、mple(persp),即可自動運行R中的三維圖像繪制函數(shù)perspR語言的包R是開源的軟件工具,很多R語言用戶和愛好者都會擴展R的功能模塊,我們把這些模塊稱為包。包是R函數(shù)、數(shù)據(jù)、預編譯代碼以一種定義完善的格式組成的集合,而在計算機上存儲包的目錄稱為庫(library)。在R中擁有數(shù)量巨大的包,這些包橫跨各個領域。值得注意的是:R自帶了一系列默認包(包括base、datasets、utils、grDevices、graphics、stats以及methods),它們提供了種類繁多的默認函數(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鏡像站點下載它并將其放入庫中的過程。要在R會話中使用它,還需要使用library()命令載入這個包。數(shù)據(jù)類型與數(shù)據(jù)對象R語言中的數(shù)據(jù)對象十分豐富

5、,本章主要講述R語言中的各種數(shù)據(jù)對象定義及使用的基本方法。數(shù)據(jù)類型在每種編程語言和不同的數(shù)據(jù)庫中都有不同的數(shù)據(jù)類型。通??梢愿鶕?jù)數(shù)據(jù)類型的特點將數(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、 變量與標量變量是計算機語言中能儲存計算結果或能表示值的抽象概念。變量可以保存程序運行時用戶輸入的數(shù)據(jù)、特定運算的結果以及要在窗體上顯示的一段數(shù)據(jù)等。在R語言中有效的變量名稱由字母,數(shù)字和點或下劃線字符組成。 變量名以字母或不以數(shù)字后跟的點開頭,并且緊隨其后的字符是不能是數(shù)字。如a、welcome、a1、x2、.x 都是合法的命名。在R中對變量賦值。 x y x1 1 y1 2在R中對變量賦值,并輸出最大值。 max(x x1 1 2 3 4 5標量R基本數(shù)據(jù)類型是向量,而標量是指長度為1的向量,即長度為1的數(shù)組。因此標量只是向量的一種特例,并且以單元素向量的形式出現(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中輸出邏輯運算。 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ù)對象從結構角度來看包括向量、矩陣、數(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中對向量進行常見運算。 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ù)對象,相當于二維數(shù)組,可以用于描述二維的數(shù)據(jù)。與向量相似,矩陣的每個元素都擁有相同的數(shù)

10、據(jù)類型。在R語言中可以使用matrix()函數(shù)來創(chuàng)建矩陣,其語法格式如下:matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)參數(shù)含義如下:data:矩陣的元素,默認為NA,即未給出元素值的話,各項為NA;nrow:矩陣的行數(shù),默認為1;ncol:矩陣的列數(shù),默認為1;byrow:元素是否按行填充,默認按列;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語言中,矩陣可與標量或是其他矩陣進行運算。如定義某矩陣為A,某標量為a,則A+x表示將矩陣的所有值與標量相加。如定義某矩陣為A,另一矩陣為B,則A+B表示求矩陣A+B的和。如定義某矩陣為A,則使用函數(shù)t()可求出該矩陣的轉置矩陣。如定義某矩陣為A

12、,則使用函數(shù)solve()可求出該矩陣的逆矩陣。如定義某矩陣為A,則使用函數(shù)nrow()可求出該矩陣的行數(shù),使用函數(shù)ncol()可求出該矩陣的列數(shù)。在R中創(chuàng)建矩陣,并進行矩陣的加減乘除運算。 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語言中,可以認為數(shù)組是矩陣的擴展,它將矩陣擴展到2維以上。如果給定的數(shù)組是1維的則相當于向量,2維的相當于矩陣。在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ù)框進行查看。 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ù)類型的轉換在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ù)類型并進行轉換。 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)實世界中的很多事情,有時需要遵循一定的條件去執(zhí)行,有時需要反復執(zhí)行,只有滿足相應的條件才能做相應的事情,不同的條

18、件會執(zhí)行不同的操作。條件結構R語言和大多數(shù)程序語言一樣都存在分支結構和循環(huán)結構兩種流程控制結構,通過if 語句和switch語句可以實現(xiàn)分支結構控制語句。 條件表達式,也稱邏輯表達式,它是一種能夠計算出布爾值(布爾真值True或布爾假值False)的表達式。 6 = 71 FALSE FALSE = 01 TRUE FALSE & FALSE #取與運算,若運算符兩邊均為TRUE,則返回TRUE;否則,返回FALSE。1 FALSE eger(2.5)1 FALSE Truth %in% c(what,is,truth)1 FALSER語言中分支結構控制語句中最基本的語句組就是if - els

19、e語句組。這組語句包含if語句,if-else語句和if-else if-else 語句。單一if語句一般用在程序中只有一個分支的情況下,它的語法結構如下: if(條件表達式)程序體判斷一個數(shù)是否為正數(shù),如果為正數(shù)則輸出語句這個數(shù)是正數(shù)x 0) print(x是正數(shù)) if-else語句的語法結構和if語句的語法結構的區(qū)別只在于,如果if的條件表達式的判定是假,則運行else中的程序體,它的語法結構是: if(條件表達式)程序體1else 程序體2當出現(xiàn)更多的分支時,R語言可以使用if-else if-else語句,這里else if的個數(shù)需要通過程序的分支個數(shù)來確定,它的語法結構是: if(

20、條件表達式)程序體1 else if(條件表達式2)程序體2else if(條件表達式n-1)程序體n-1 else 程序體nswitch語句R語言switch語句的基本語法如下: switch(表達式,實例1,實例2, )x switch(x, first, second, third, fourth)1 secondx print(x) 1 third循環(huán)結構在R語言中for循環(huán)的語法結構如下: for(循環(huán)變量 in 循環(huán)區(qū)間) 循環(huán)體使用for循環(huán)的使用,實現(xiàn)1至10的累加和。 sum for(n in 1:10) sum = sum +n print(sum)1 55while循環(huán)在

21、R語言中,while循環(huán)的語法結構和其他語言的while循環(huán)的語法結構相似,如下: while(條件表達式) 循環(huán)體while循環(huán)的語法結構比較簡單,上例實現(xiàn)如下: sum i while( i = 10)sum = sum +ii print(sum)1 55break語句break語句的作用是,一旦其被調用,不論循環(huán)是否結束都會跳出循環(huán),需要注意的是,和return( )函數(shù)不同,return( )函數(shù)是結束該函數(shù),而break語句只會從循環(huán)中跳出使用break語句實現(xiàn)1至10之間整數(shù)的累加和,當大于等于10時跳出循環(huán): sum i while( i =11) break;sum = su

22、m +ii print(sum)1 55repeat語句repeat是無限循環(huán)語句,并且會在達到循環(huán)條件后,使用break語句直接跳出循環(huán),其語法結構如下: repeat 語句 if (條件表達式) break 函數(shù)R語言包含了豐富的內(nèi)部函數(shù),R語言的擴展包也包含了大量的可實用函數(shù)。R語言中如何自定義函數(shù)。自定義函數(shù)的格式如下: 函數(shù)名 sum-function(n) s-0 for (i in 1:n) s sum(100) 1 5050返回值在R語言中,函數(shù)的返回值可以返回任何R對象,盡管返回值通常為列表形式。在程序中可以通過顯式調用return( )函數(shù),把一個值返回給主調函數(shù)。函數(shù)的參

23、數(shù)在R語言中,函數(shù)的參數(shù)值可以沒有,可以有一個,也可以有多個;參數(shù)值的類型可以是R語言的基本類型,也可以是函數(shù)。自定義一個函數(shù)實現(xiàn)三個數(shù)的相加,代碼如下: sum sum(100, 200, 500) #雖然參數(shù)a, c都有默認值,此處對a,c重新賦值,b取值2001 2000 sum(100, 200) #參數(shù)c取默認值1 2000 sum(a=100, b=200) #通過賦值的方式給a,b賦值,參數(shù)c取默認值1 2000 sum(b=200, a=100) #通過賦值的方式給a,b賦值,可以不按順序1 2000sum(100, 200, 300) #參數(shù)a,c不取默認值,重新賦值1 14

24、00程序的向量化實現(xiàn)在R語言中,采用顯示循環(huán)會涉及多次函數(shù)的調用和迭代,常常很耗費時間。很多情況下循環(huán)和控制結構可以通過向量化來實現(xiàn),可以有效提升速度將下列條件語句改用邏輯索引的向量化實現(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ù)集進行循環(huán),并返回和x長度同樣的列表作為結

25、果數(shù)據(jù)集,參數(shù)與apply( )函數(shù)的參數(shù)相同計算list中的每個key對應的數(shù)據(jù)的分位數(shù)。代碼如下: #構建一個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ù)其實是一樣的,只是返回的結果是一個向量或者是一個矩陣,當無法將一個結果簡化為矩陣時,就會返回一個列表。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ù)來設定每次返回值的模板。與sapply()類似,vapply()也會對apply結果進行簡化tapply()函數(shù)tapply()函數(shù)允許根據(jù)某些變量的值,把原始數(shù)據(jù)分割為若干組,然后對每一組數(shù)據(jù)應用特定的操作。mapply( )函數(shù)多參數(shù)版本的sapply()。第一次計算傳入各組向量的第一個元素到FUN,進行結算得到結果;第二次傳入各組向量的第二個元素,得到結果;第三次傳入各組向量的第三個元素以此類推。rapply( )函數(shù)rappl

28、y( )函數(shù)是lapply( )函數(shù)的一個遞歸版本,它只負責處理列表(list)類型數(shù)據(jù),對列表中的每個元素進行遞歸遍歷,如果list包括子元素則繼續(xù)遍歷。數(shù)據(jù)的讀寫與預處理在真實的數(shù)據(jù)分析場景中,獲取到的原始數(shù)據(jù)一般都存在有缺失值、重復值、異常值或格式等等問題,有必要對數(shù)據(jù)進行預處理,才能進行下一步的數(shù)據(jù)分析工作。R語言基本的輸入輸出功能主要包括三種形式: 鍵盤錄入和屏幕輸出、文本格式的輸入輸出、自有二進制格式的輸入輸出。工作目錄是數(shù)據(jù)分析時輸入輸出的一個默認文件夾。在設置工作目錄之前,還需要確保所要設置的文件夾是否存在。這可以利用函數(shù)dir.exists( )來判斷文件夾是否存在,如不存在

29、,可以利用函數(shù)dir.create( )新建一個文件夾setwd(d:/R語言實訓) #無法設置,可能是文件夾不存在Error in setwd(d:/R語言實訓): cannot change working directorydir.exists(d:/R語言實訓,)#判斷文件夾是否存在1FALSEdir.create(d:/R語言實訓)#不存在的話,可以新建一個setwd(d:/R語言實訓) #設置工作目錄getwd( ) #獲取當前工作目錄1d:/R語言實訓向量的輸入scan( )函數(shù)可以用于直接鍵盤錄入,以構建一個向量,該函數(shù)也可以利用參數(shù)file直接讀取文件中的向量,如: x=1:

30、8write(x, data.txt) #將一個數(shù)值向量保存在文件data.txt中scan(data.txt)#利用scan( )函數(shù)將這個數(shù)值向量寫進來Read 8 items112345678數(shù)據(jù)文件的讀取在數(shù)據(jù)分析中,數(shù)據(jù)經(jīng)常采用數(shù)據(jù)表的形式進行存儲和計算,即每列代表一個變量,每行代表一個個體或一條記錄。矩陣和數(shù)據(jù)框從形式上看都是行列表,因此都能以數(shù)據(jù)表的形式進行輸出,但寫入數(shù)據(jù)表文件時,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ù)并不能自動識別行號,而將自動生成的行名作為一列寫了進來。此時,可以利用參數(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ù)為基礎包自帶函數(shù),可以讀取文本數(shù)據(jù)和csv格式數(shù)據(jù)使用read.table函數(shù)讀取文件名為train.txt的文件 train library(readxl) read_excel(data.xlsx, sheet = 1)數(shù)據(jù)的輸出在數(shù)據(jù)分析的過程中,當需要顯示某個變量的值時,可以在命令提示符后直接鍵入變量的名稱,但在循環(huán)結構中,必須使用函數(shù)對其進行屏幕輸出。 for(i in 1:2) i#

33、在循環(huán)結構中,僅使用變量名無法輸出變量的內(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格式文件的讀取進行講解。在使用這個包之前,首先要用install.packages( )函數(shù)安裝這個包,命令如下: install.packages(openxlsx)write.xlsx( )函數(shù)將數(shù)據(jù)保存為xls

36、x格式,用法如下: datawrite.xlsx(data, data.xlsx) #將數(shù)據(jù)框data以xlsx格式進行輸出如上所示,該函數(shù)將一個數(shù)據(jù)框變量保存為xlsx格式文件,并默認保存在工作目錄下。這個文件只包含一個名稱為“Sheetl”的表。由于一個xlsx格式文件可以包含多個表,因此可以將多個不同結構的數(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ù)時

37、,該命令對于變量的類型沒有要求,可以保存任意類型的數(shù)據(jù),如: a=1: 10 #構建一個向量b=matrix(1: 6,2)#構建一個矩陣c-data.frame(x1=1: 3, x2=letters1: 3)構建一個數(shù)據(jù)框d=list(a, b, c)#構建一個列表save(a, b, c, d, file=sample.rdata)#將以上變量保存到文件sample.rdata中變量的預處理 在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ù)進行修改,這些函數(shù)是在原數(shù)據(jù)集中修改變量名。變量類型的轉換R語言中,可以使用以下函數(shù)判斷變量類型和對變量類型進行轉換:is/as.numeric( ) 是否/轉換為數(shù)值型is/as.character( ) 是否/轉換為字符型

40、is/as.vector( ) 是否/轉換為向量is/as.matrix( ) 是否/轉換為矩陣is/as.data.frame( ) 是否/轉換為數(shù)據(jù)框is/as. factor ( ) 是否/轉換為因子is/as.logical( ) 是否/轉換為邏輯型字符串的處理R語言中分割字符串是使用strsplit( )函數(shù)來實現(xiàn)的,strsplit( ) 函數(shù)是一個拆分函數(shù),該函數(shù)可以使用正則表達式來對字符串進行匹配拆分。它的語法結構是: strsplit(x, split, fixed= FALSE, perl= FALSE, useBytes= FALSE)對字符串It requires no

41、n-string elements to be converted to strings.中間的空格進行拆分。第一種拆分方式的代碼如下: 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取默認值1 a A b B c C d D e E paste(x, y, sep= ) #使用空格進行拼接,結果與拼接方式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字符串長度計算計算字符串長度可以用nchar( )函數(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ù)設置不

44、同。這兩個函數(shù)的語法結構如下: 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,如果不包含,則在相應位置輸出空值;如果包含,則在相應位置返回該字符串。str_match(c(ssss,str_str),str),1 1, NA2, str日期變量的處理和轉換在R語言的實際項目分析中,時間是一個重要的數(shù)據(jù),在很多數(shù)據(jù)分析項目中時間序列是重要的分析指標,本節(jié)講述R語言是如何處理日期和時間的。程序員在編程中遇到的第一個與時間相關的問題大多是如何取系統(tǒng)時間,R語言取系統(tǒng)時間常使用的函數(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語言中,將文本轉換成日期和時間通常使用as.Date( )函數(shù)、as.POSIXct( )函數(shù)、as.POSIXlt( )函數(shù)、strptime( )函數(shù)。下面是這幾個函數(shù)的語法結構: as.Date(x, format)as.POSIXct(x. format. tz=, .)as.POSIXIt(x. format, tz=, .)strptime(x, format, tz=)字符串類型的數(shù)據(jù)可以轉換成時間類型的,當然時間類型的數(shù)據(jù)也可以轉化為字符串類型的,常用的函數(shù)有format( )函數(shù)和strftime( )函數(shù),它們的語法格式如下: format(x,format

47、,tz=)strftime(x,format,tz=)清洗重復數(shù)據(jù)duplicated( )函數(shù)會在數(shù)值第一次出現(xiàn)的時候返回FAL.SE,在數(shù)值重復出現(xiàn)的時候返回TRUE,代碼如下: x duplicated(x)1 FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE經(jīng)過查詢,向量x中有TRUE值,說明x中包含重復值。去除重復值的第二個步驟是查找重復值的索引值,該操作使用which( )函數(shù)來完成,代碼如下: x y which (y) #返回重復值的索引位置1 4 5 8 9去除重復值的主要思想就是把上面找到的索引值以外的數(shù)據(jù)從目標數(shù)據(jù)中取出并

48、放到一個新的對象中。 x y new new1 5 6 7 8 9缺失數(shù)據(jù)處理R語言中,NA為Not Available的縮寫,代表缺失值,NaN為Not a Number的縮寫,代表不可能值,Inf和-Inf代表正無窮和負無窮。函數(shù) is.na( )、 is.nan( )和is.infinite( )可以分別用來識別缺失值、不可能值和無窮值。每個返回結果都是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ù)是否完整從而判斷缺失情況。在對是否存在缺失值進行判斷之后需要進行缺失值處理,常用的方法有刪除法、替換法、插補法等。使用均值替換法對缺失數(shù)據(jù)進行填充 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ù)樣本點,其數(shù)值明顯偏離于所屬樣本的絕大部分觀測值,所以也稱為離群點。利用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ù)列進行合并,即疊加所有列,m列的矩陣與n列的矩陣cbind(

54、 )最后變成m+n列,合并前提: cbind(a, c)中矩陣a、c的行數(shù)必需相符。rbind( )函數(shù)是根據(jù)行進行合并,就是行的疊加,m行的矩陣與n行的矩陣rbind( )最后變成m+n行,合并前提: rbind(a, c)中矩陣a、c的列數(shù)必需相符。R語言基本圖形R語言的基本圖形是由一些基本繪圖函數(shù)來實現(xiàn)的,這些繪圖函數(shù)通常會生成一個默認而且相對完整的圖形,這些圖形基本可以滿足實際應用的需求。散點圖 x y plot(x, y, xlab = 廣告投入(萬元), ylab = 銷售額(百萬元), main = 廣告投入與銷售額的關系)plot(x, y, xlab = 廣告投入(萬元),

55、ylab = 銷售額(百萬元), main = 廣告投入與銷售額的關系, pch=16, col=red, cex=2) # pch為指定繪制點時使用的符號,不同的數(shù)值會顯示不同的符號。取值16表示實心圓點,cex為指定符號的大小。 點圖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) #繪制點的數(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) #每季度對應的銷售額情況,單位為百萬元 names = c(春季, 夏季, 秋季, 冬季) cols = c(brown,orange,red,green) #指定每季度對應的顏色 pie(sale, labels=names, main = 各季度銷售額情況) #繪制餅圖,系統(tǒng)自動分配顏色 percent = paste(round(100* sale/sum(sale), %) #計算每季度銷售額

58、的占比情況 percent 1 7 % 13 % 27 % 53 % pie(info, labels=percent, main = 各季度銷售額占比情況, col=cols) # 繪制餅圖,按指定顏色著色,并按每季度銷售額計算全年的占比情況 legend(topright, names, cex=0.8, fill=cols) # 添加圖例標注箱線圖h boxplot(h, col = orange)直方圖 v hist(v, main=學生成績分布, xlab = 分數(shù), ylab=學生數(shù), col = green,border = brown)hist(v, main=學生成績分布,

59、xlab = 分數(shù), ylab=學生數(shù), col = green, border = brown, xlim = c(68,90), ylim = c(0.5, 3.5), breaks = 5) #使用xlim和ylim參數(shù),可以指定X軸和Y軸允許的值的范圍。每個條的寬度可以通過使用斷點來決定。R語言圖形修飾圖形可以看成是由點、線、文本和多邊形(填充區(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ū)銷售額的條形圖,并使用字體相關參數(shù)創(chuàng)建斜體、1.5倍于默認文本大小的坐標軸標簽(名稱),以及粗斜體、2倍于默認文本大小的標題。 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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論