第二篇——用幾分鐘了解R語言入門知識
幾分鐘怎麼可能了解R的入門知識嘛。。。給你們看看《R in action》里「入門」部分的目錄——
還有一面,就不放出來了。總共有100多頁。講真,雖然是經典教材,但《R in action》這種欺負浮躁現代人的做法還是讓我心裡狠狠抽搐了一把,差點就放棄了(雖然我還是把它們看完了)。好啦好啦,我不是來秀優越的。我只是想說,不是每個人都需要先啃完這100多頁的萬里長城,再開始學習R的核心內容的。更何況這100多頁里有大量抽象的歸納、長得差不多的函數,極其難背。
我認為,這裡面的大部分內容,不需要率先掌握。
一、三大件,你們還記得嗎?
A通道里的三大件:數據清洗、數據分析、數據可視化
三大件今天暫時還講不了,我們需要一點入門的預備知識。
接下來要做的,則是實踐標題中的內容:用幾分鐘了解R入門知識。
二、首先,你得保證你的電腦里已經安裝了R(這麼簡單的問題不用我再講了吧。。)
還沒裝的點這裡去下載!!!!
還有,R studio也必須安裝。這是目前我感覺最好用的R用戶界面,不裝後悔,不裝不是中國人,13億人都裝了你還在等什麼。(點進去選擇Download Rstidio Desktop)三、R入門知識到底有哪些東西?
我總結成以下四個標題:
命令行,數據對象,函數(function),par
先記住這四個名字,本篇文章所有東西將圍繞他們展開。
其他所有的東西,我覺得都不是入門必須。雖然它們很有用,但它們不是必須。
下面開始一個個講。
四、命令行
R採用的是命令行輸入界面,也就是我們常說的寫代碼。代碼大概長這樣:
「>」之後就是游標,你可以向裡面輸入數字、計算式,也可以輸入函數和變數,或者一切R能聽懂的語言。R都會熱情地給你反饋。當你安裝好R和Rstudio之後,就可以盡情地嘗(tiao)試(xi)命令行了。在Rstudio裡面,命令行默認位於屏幕左下方區域,如圖:
左上區域則是代碼儲存窗口,你可以在裡面先隨便寫點代碼,一言不合就點擊Run來運行它們。(以你們目前的實力,R應該會立馬給你們報錯。)命令行裡面,一般會輸入哪些東西?
第一種——算式,諸如1+1,3+5之類的。這種時候R完全可以當做計算器來用。(簡直是廢話)值得一提的是,注意看上面的圖,輸入1+1之後R給出的返回值是[1] 2,這裡方括弧里的[1]代表的是順序,我們會在後面(數據對象)具體講解。
第二種——調用對象。會在數據對象中講解。
第三種——函數,函數,函數,重要的事情說三遍。命令行里99%以上的輸入,都是函數,你說重要不重要?具體的,我們會在函數裡面詳細講解。
五、數據對象
如果說R是一個廚房,那麼數據對象就是不同的容器,鍋碗瓢盆應有盡有。數據只有藉由容器,才能進行清洗、加工,以及用於分析。
廚房裡的鍋碗瓢盆有很多種,R的數據對象也有很多種。但目前大家記住其中的三種就好:
1.碗——向量(vector)
廚房裡最小的容器,一般都是碗。向量也是R裡面最小、最基礎的數據對象。
> c(1,2,3,4,5)[1] 1 2 3 4 5> c(1:20) [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20> 1:30 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22[23] 23 24 25 26 27 28 29 30
函數c()的效果,就是把括弧裡面的東西做成一個向量,向量的不同元素以「,」作為分隔。
而「:」的作用顯而易見,1:20表示從1到20這20個數字。
注意,看代碼的最後一行,開頭是方括弧[23]。這代表這一行從向量的第23個元素開始。回想上一節,為什麼「1+1」返回值是「[1] 2」呢?就是因為向量是R裡面最小的數據對象,所以1+1不得不生成只有一個元素的向量。這就好比,廚房裡最小的碗也有拳頭大,但為了裝一顆豆子,還是要大材小用。
> x<-c(1,2,3,4) #把向量賦值給x> y<-c(3,5,7,9)> x #調用向量x[1] 1 2 3 4> y[1] 3 5 7 9> x[2] #調用向量x的第二個元素[1] 2
上面的代碼很重要,它進行了一個最基本也是最重要的操作:賦值。可以看做是「給容器貼標籤」
方法很簡單,採用「<-」符號就可以了。箭頭指向標籤名。上面的代碼表示,有一個碗里放了四顆豆子分別叫做1、2、3、4,於是我們給這個碗貼上標籤叫做「x」。另一個碗里放了四顆豆子叫做3、5、7、9,我們貼上「y」的標籤。
賦值有什麼作用呢?作用就是,如果沒有標籤,我們可能就找不到這兩個碗和裡面的豆子了。
賦值之後就是調用,只要輸入變數名稱(標籤名)就能調用對應的內容(碗)。而輸入變數名稱+順序號,就能調用單個元素(豆子)。如上所示
> x+y[1] 4 7 10 13> x%*%y #這裡「%*%」表示求兩個向量的內積,然後會生成一個1*1矩陣 [,1][1,] 70> x*2[1] 2 4 6 8
向量之間也可以直接運算,方法和初高中數學裡學的向量運算差不多,類似於上面那些。大家可以自己實驗一下。不明白的,你們就自己百度去吧。(不負責任的我啊。。)
2.多功能櫥櫃——列表(list)
列表是一個神奇的數據對象,如同廚房裡的多功能櫥櫃。
櫥櫃里有很多格子,每個格子都能盛放很多東西。列表也是這樣,列表裡可以單獨分出很多格子,每個格子都能盛放一個單獨的數據對象(可以是向量、矩陣,甚至是另外一個列表)。
而櫥櫃的格子也需要編號,編號方法略有不同。看下面的例子:
> list1<-list(x,y,c(3,3))> list1[[1]][1] 1 2 3 4[[2]][1] 3 5 7 9[[3]][1] 3 3
通過list()函數,我們定義了一個叫做list1的列表(多功能櫥櫃)。這裡面現在有三個格子,非常清晰地顯示在代碼中,它們的編號方式是兩個方括弧[[1]]。
聰明的讀者應該也能想到,列表及其中的元素同樣也能進行調用。
> list1[[1]] #調用list1中的第一個「格子」[1] 1 2 3 4> list1[[1]][3] #調用list1第一個「格子」里的第三個元素。[1] 3
三個格子中,每個格子裝一個向量。
列表的作用是什麼?等到下一章,你們就知道了。
3.炒鍋——數據框(data frame)
數據框是R裡面最重要的數據對象!數據框是R裡面最重要的數據對象!數據框是R裡面最重要的數據對象!重要的事情說三遍!
炒鍋在廚房裡無疑也是最重要的。菜品的完成,大部分時間都依賴炒鍋。我們數據分析的過程中,數據大部分時間也是呆在數據框裡面的。
但數據框這個名字有點抽象。其實,他就是二維表。或者再通俗一點,就是我們天天見到的表格。在R裡面大概長成下面這樣:
States是一個數據框(表格),head()函數幫助我們調用了這個表格的前五行。我們能看到,這個表格包括美國各個州的人口、收入等等數據。雖然沒有畫線,但是還是能看得出典型的行標籤、列標籤和數據內容的。顯然,這就是我們日常處理數據的時候,最喜歡用的方法:表格。
數據框的賦值通過函數data.frame()完成。很簡單,日後提到的時候,一看就懂。
表格里的內容當然也可以調用,但似乎沒有前兩個那麼直觀。方法如下:
> States$pop #數據框名後加上美元符號"$",接列標籤名,就能調用列。輸出結果是一個向量 [1] 4041 550 3665 2351 29760 3294 3287 666 607 12938 6478[12] 1108 1007 11431 5544 2777 2478 3685 4220 1228 4781 6016[23] 9295 4375 2573 5117 799 1578 1202 1109 7730 1515 17990[34] 6629 639 10847 3146 2842 11882 1003 3487 696 4877 16987[45] 1723 563 6187 4867 1793 4892 454> States[2] #用數字也可以調用列,但出來的則是一個砍掉了其他所有列的數據框 popAL 4041AK 550AZ 3665AR 2351CA 29760CO 3294
日常操作中,我們一般會用attach()來鎖定一個數據框。之後,只要直接輸入列名稱,就能調用列了。如下。
> attach(States)> pop #效果相當於語句States$pop [1] 4041 550 3665 2351 29760 3294 3287 666 607 12938 6478[12] 1108 1007 11431 5544 2777 2478 3685 4220 1228 4781 6016[23] 9295 4375 2573 5117 799 1578 1202 1109 7730 1515 17990[34] 6629 639 10847 3146 2842 11882 1003 3487 696 4877 16987[45] 1723 563 6187 4867 1793 4892 454
4.數據對象小結
R的數據對象有很多種,我們現在先記住其中的三種。
碗——向量(vector)
多功能櫥櫃——列表(list)
炒鍋——數據框(data frame)
並且,記住他們的結構,賦值方法,以及調用方法。
其他的數據對象包括矩陣(matrix),數組(array),時間序列(ts)等等,以後再談。
值得一提的是,千萬不要把數據對象和數據類型搞混。前者就是我們剛剛講的容器的種類,而後者則是豆子的種類。
數據類型包括數值型(numeric),字元型(character),缺失值(NA)等等,一看就懂。可以通過mode()函數檢測數據類型:
> x<-c(1,2,3.3,pi) #這些都是數字,當然是數值型> mode(x)[1] "numeric"> y<-c("thanks","for","dian","zan") #雙引號或單引號括起來的任何東西,都是字元型> mode(y)[1] "character"> z<-c(1,2,3,"oops") #然而一個向量不能同時存在數值和字元元素。如果你加了一個字元型進去,整個向量的所有元素都會自動加上雙引號,變成字元型。> mode(z)[1] "character"
美好的一天,再寫下去可能看官們就要睡著了。(你們是不是已經忘掉了標題中的「幾分鐘」呢?哈哈哈哈)
下一篇預告——用幾分鐘了解R語言入門知識(續)。
我們繼續介紹剩餘的兩項R入門內容:函數,par。
(我知道你們可能會吐槽這個續字。冷靜,不如幫我+1s,點個贊啊。)
數據分析筆記目錄:關於數據分析學習筆記的計劃(以及目錄)
推薦閱讀: