R語言從入門到精通:Day6
- 2019 年 10 月 6 日
- 筆記
關注
我們一波了
距離上次R語言系列更新已經過去快一周了,先跟大家說聲不好意思,實話實說更新速度的確慢了一點
最近經過前面幾次推文的學習,我們的R語言教程已經講解了快1/3的內容,相信大家對R語言已經有了初步的了解,特別是感受了R語言在數據處理領域的強大功能。數據處理是R語言和數據挖掘的重要基礎,要求大家務必熟練操作,所以今天我們就從一個簡單的實例出發,給大家繼續講解數據處理進階及控制結構。
溫馨提示
1、本節內容重點內容較多,
務必緊跟紅色標記。
2、測試數據及程式碼
見文末客服小姐姐二維碼。
先看看我們的數據實例:
一組學生參加了一次會考,要求根據學生的所有科目成績對學生進行排名,將前20%的學生評定為A,接下來20%的學生評定為B,依此類推,最後將學生按姓名字母順序排序。數據如下:

考試排名對大家一定不是一件陌生的事情,可是這次的排名卻有點不一樣,因為這三個科目的分值的均值和方差相差太大,如果直接比較總分就太便宜數學好的同學了吧!所以我們要找到將三個科目的分值轉化為可比較的單元,然後將學生按成績排名分類(相信大家還記得前幾次教程裡面的變數的重編碼),最後按照姓名排序,這樣就完美的解決了這個難題。本次教程就能幫助大家做到上面說的這些步驟,從簡單實例出發,舉一反三,初探數據挖掘實例。

1、數值和字元的處理函數
R中數據處理的基礎函數可以分為數值(數學、統計、概率)函數和字元處理函數,下面分別介紹一下這些函數:
1. 數學函數(掌握)
下面給大家列出了常用的數學函數。

數據處理中數學函數是不可或缺的,上面這些函數也是最常見和常用的一部分函數。它們不僅可以對單個標量使用,也可以作用於向量、矩陣、數據框等,這時函數會分別作用於每個獨立的值。這裡就不一一舉例示範函數的使用了,大家不妨自己動手試一試。
2. 統計函數(掌握)
下面給大家列出常見的統計函數。

如果沒有這些函數,我們要求一個數值向量的均值、方差和標準差該怎麼辦呢?如下圖1.

圖1:均值和標準差的兩種實現
實際上我們還是借用了求和函數,就算如此,程式碼量也有所增加。上面這些簡單而重要的統計函數將會伴隨你使用R語言的全部旅程。
3. 概率函數(了解)
數學課上,概率和統計都是放在一起學習的,有一門課程就叫做概統,但是這裡我們把概率函數和統計函數分開講解。
R中,概率函數形如 :
[dpqr]distribution_abbreviation()
其中第一個字母表示其所指分布的某一方面:
d = 密度函數(density)
p = 分布函數(distribution function)
q = 分位數函數(quantile function)
r = 生成隨機數(隨機偏差)
上過概統課的同學一定不會對上面的數學術語陌生,如果你感到陌生,或許你應該把數學書拿出來複習一下了。
下面是一些常用的概率函數:

下面是正態分布的d、p、q、r四個函數的舉例。

圖2:正態分布示例

圖3:圖2程式碼的結果
上面的例子中,函數pretty()幫我們生成了一個長度為30的範圍在-3到3之間的等差數列x,然後用plot()畫出了一張-3到3之間的正態分布曲線。函數pnorm()則給出了1.96 左側的標準正態曲線下方面積,qnorm(0.5)說明標準正態分布的0.5分位點為0(很明顯)。rnorm()給出五個符合標準正態分布的隨機數。
正態分布的每個函數中都有mean和sd這兩個參數,用於非標準正態分布的情形,大家可以查看幫助文檔了解。
4. 字元處理函數(掌握)
前面的三類函數都是用於處理數值的,字元處理函數則是用於從文本型數據中抽取資訊,或者為列印輸出和生成報告重設文本的格式。下面是字元處理函數的一些例子:

表格中提到的正則表達式是一個非常強大的文本模式的匹配語法(學過perl或者python的同學不會陌生,正則表達式在生物資訊、網路爬蟲等方向的項目中都應用廣泛,值得大家學習。後面我們也可以單獨講一下正則表達式的規則和用法)。關於R中的字元串處理,還有一個非常強大的R包,就是stringr包,大家可以自己裝一下這個包,運行學習一下。
5. 其他實用函數(掌握)
除了上面提到的這幾大類函數,還有一些靈活好用的函數值得一提。
如:seq()、rep()、cut()、pretty()等等。在前面的學習過程中其實我們都已經用到了上面這些函數,下面是一些實際的例子。

圖4:實用函數舉例
當然,這樣的函數很多,不可能在這裡全部列出來,大家在運用R的時候遇到了很好用的函數也可以拿出來討論一下。
6. 函數的應用(了解)
R的諸多特點之一,就是R的函數的使用很靈活,不僅可以應用在標量上,也可以照搬到向量、矩陣等高維數據類型。值得一提的是,R提供了apply()函數,可以將任意函數「應用」到任何維度的數據上去。下面是一個示例:

上面的例子中先生成一個6*5的正態隨機數矩陣,然後分別對行、列求均值。函數apply()因為其靈活性,功能很強大並且應用廣泛,與之類似的還有sapply()和lapply(),主要用於列表上。學習完了這麼多函數,大家還記得最開始我們的問題嗎,可以嘗試解決一下,畢竟學了這麼多,會用才是最終目的。需要解答參考程式碼的同學可以諮詢客服小姐姐。

2.控制流
在下一次教程中,我們就要開始討論R中的圖形繪製了,在這之前,有必要給大家多講講R語言的函數部分,這裡主要給大家介紹一下R語言中的條件語句和循環語句。
1. 重複和循環(掌握)
R語言中的循環主要有for和while兩種結構,語法示例如下:

但是R語言中的循環語句效率不高,大型數據集中不太推薦這種用法。Tips: 大型數據集,記得用lapply, sapply, tpply這一類的高級迭代循環哦~
2. 條件執行(了解)
R語言中的條件控制主要有if-else、ifelse、switch三種結構,if-else結構就不舉例了,下面是ifelse和switch的兩個例子。

圖7:條件語句示例
3. 自編函數(了解)
和所有的程式語言一樣,用戶也可以用R語言編寫自定義的函數。其實,我們以後工作學習中用到的很多函數都是別人寫好的函數,下面舉一個最簡單的例子:

圖8:自編函數示例
到這裡為止,我們介紹的內容已經可以幫助大家做很多基礎工作了,下一階段的內容會主要聚集於圖形繪製,相信會給大家有更大的幫助。

小結
加上今天的文章,我們的《R語言從入門到精通》系列已經更新大概1/3的內容了,特別是關於數據操作的基礎內容。後面我們會逐步講解繪圖、機器學習及更加高級、更加貼近實戰的內容。再給大家鼓鼓氣,繼續堅持學習,精通R語言指日可待哦!
本期乾貨
·
!R語言數據操作進階及控制結構 !
!示例程式碼 !
原文詳情:「科研貓」公眾號