上一節(jié)課我們熟悉了R語言中的各種數(shù)據(jù)類型,幫大家復(fù)習(xí)一下,這些數(shù)據(jù)類型包括了向量(vector)、矩陣(matrix)、數(shù)組(array)、數(shù)據(jù)框(data.frame)和列表(list),還提到了因子(factor)。這些數(shù)據(jù)類型在我們運(yùn)用R語言解決實(shí)際問題的時(shí)候都非常有用,在上節(jié)的例子中我們是在R里面直接生成的數(shù)據(jù),但是實(shí)際數(shù)據(jù)分析中,如何快速靈活的讀取和處理多種格式的外部數(shù)據(jù)呢?這節(jié)課的主要內(nèi)容,我們就來講講R語言中數(shù)據(jù)的讀取。 溫馨提示 1、本節(jié)內(nèi)容重點(diǎn)內(nèi)容較多, 務(wù)必緊跟紅色標(biāo)記。 2、測(cè)試數(shù)據(jù)及代碼 見文末客服小姐姐二維碼。 上節(jié)教程結(jié)束后,有同學(xué)問:我每次用R語言解決實(shí)際問題的時(shí)候都要像第3節(jié)中那樣用鍵盤將每個(gè)數(shù)據(jù)輸入電腦里面嗎?答案當(dāng)然是否定的。R語言給我們配套了多種輸入數(shù)據(jù)的方法和接口,能夠快速靈活的處理多種格式的數(shù)據(jù)(如圖1)。這節(jié)課的主要內(nèi)容就是R語言中數(shù)據(jù)的輸入。 圖1:R語言數(shù)據(jù)輸入的示意圖 下面來逐一學(xué)習(xí)不同的數(shù)據(jù)導(dǎo)入方法。 1. 使用鍵盤輸入數(shù)據(jù) 要求:了解 在上一次的學(xué)習(xí)中,大家已經(jīng)接觸了很多了創(chuàng)建不同類型變量的方法,這里再給大家提供幾個(gè)從鍵盤輸入數(shù)據(jù)的方法。如圖2、圖3、圖4所示: 圖2:函數(shù)read.table()的鍵盤輸入用法 圖3:函數(shù)fix()的使用(1) 圖4:函數(shù)fix()的使用(2) 第一種方法是在創(chuàng)建data.txt字符串之后,用函數(shù)read.table()創(chuàng)建數(shù)據(jù)框data.1。這種用法可以讓我們把數(shù)據(jù)嵌入R代碼中去。此處切記,read.table()函數(shù)是我們最為常用的讀取外部數(shù)據(jù)的函數(shù),下文還會(huì)詳細(xì)解讀。 第二種方法是用函數(shù)fix()創(chuàng)建了一個(gè)和data.1一樣的數(shù)據(jù)框data.2,函數(shù)edit()也有同樣的效果,大家可以在幫助文檔里面找一下函數(shù)edit()的具體用法。 這些在處理一些小數(shù)據(jù)集的時(shí)候是很有效的,但是面對(duì)大數(shù)據(jù)的問題就力不從心了,并且也不夠靈活,而下面要介紹的方法就是要解決這兩個(gè)問題。 2. 從文本文件導(dǎo)入數(shù)據(jù) 要求:必須掌握 在上文的第一種方法中,函數(shù)read.table()是從鍵盤輸入的字符串變量里面創(chuàng)建數(shù)據(jù)框的,這種方法并不適用,實(shí)際上read.table()函數(shù)的功能要更加強(qiáng)大一些。函數(shù)read.table()更加常用的是從帶有分隔符的文本文件中讀入數(shù)據(jù)并創(chuàng)建數(shù)據(jù)框(實(shí)際上csv文件就是常見的帶分隔符的文本文件,其分隔符是逗號(hào)“,”,csv文件可以通過文本編輯器或者excel軟件創(chuàng)建,也可以是perl、python腳本的輸出結(jié)果)。 在Rstduio中輸入read之后會(huì)自動(dòng)聯(lián)想出函數(shù)read.table()、read.csv()和read.csv2(),這三個(gè)函數(shù)的用法比較接近,這里就只介紹read.table(),另外兩個(gè)函數(shù)大家可以自己嘗試。 可能有些同學(xué)已經(jīng)發(fā)現(xiàn)在R的幫助文檔里面,函數(shù)read.table()的參數(shù)很多,看上去很復(fù)雜,不用擔(dān)心,實(shí)際使用中我們需要調(diào)整的參數(shù)并不多,下面列出了一些關(guān)鍵的參數(shù)用法: 表1:函數(shù)read.table()的參數(shù)及用法 以文件example.csv為例(測(cè)試數(shù)據(jù)見文末,聯(lián)系胖雨小姐姐可得)來演示一下,文件中以逗號(hào)作分隔符,每個(gè)數(shù)據(jù)都用雙引號(hào)圍住。 圖5:example的一部分?jǐn)?shù)據(jù) 文件example.csv里面前7行是主體數(shù)據(jù)的注釋,第一列是基因名。如果直接用函數(shù)read.table()讀取,如圖6。 圖6:直接讀取的示意圖 圖7:調(diào)整參數(shù)之后的示意圖 可以看到圖6中的讀取效果并不理想,在圖7中,加上skip和row.names兩個(gè)參數(shù)之后,數(shù)據(jù)就顯得有條理了。函數(shù)read.table()還有很多其他的參數(shù),感興趣的同學(xué)可以多嘗試一下。 3. 從xlsx文件讀入數(shù)據(jù) 要求:了解 對(duì)于平時(shí)更多使用excel軟件的同學(xué)而言,xlsx格式的表格文件比csv要更常見,所以這里也提一下怎么把xlsx文件導(dǎo)入R語言(其實(shí)在excel軟件包里面,大家可以直接把xlsx文件另存為csv文件,就可以直接用函數(shù)read.table()、read.csv()和read.csv2()了)。 在有些R語言教程中,推薦了R包xlsx,但是這個(gè)包依賴與xlsxjars和rJava包(關(guān)于R包的內(nèi)容,請(qǐng)參考前期文章:挖掘GEO速成SCI文章系列教程(3)-R語言基礎(chǔ)),以及一個(gè)正常工作的Java,安裝起來較為麻煩。 這里我給大家推薦一個(gè)不需要這些依賴的R包:openxlsx(openxlsx包的安裝如圖8)。openxlsx包的幫助文檔里介紹了三個(gè)寫入數(shù)據(jù)和一個(gè)讀取數(shù)據(jù)的函數(shù),其中讀取數(shù)據(jù)的函數(shù)read.xlsx()就能實(shí)現(xiàn)xlsx文件的讀取。這個(gè)函數(shù)的命名和用法都和read.table()非常類似(如圖9),大家不妨自己嘗試一下如何使用這個(gè)函數(shù)。 圖8:包openxlsx的安裝 圖9:函數(shù)read.xlsx()的參數(shù) 4. 常用的數(shù)據(jù)操作函數(shù) 要求:掌握 讀取數(shù)據(jù)之后,大家就可以開始做一些簡單的數(shù)據(jù)處理了。R語言中有很多常用的函數(shù),這里先給大家一個(gè)簡短的表格,供大家在讀取數(shù)據(jù)后做一些練習(xí)。一些更加復(fù)雜的函數(shù)在下次再集中給大家介紹。 ![]() 實(shí)際上數(shù)據(jù)的讀取只是R語言的冰山一角,但是也是開始一個(gè)數(shù)據(jù)分析項(xiàng)目的不可或缺的一步。上面只介紹了三種數(shù)據(jù)輸入的方法,也是大家在自己項(xiàng)目中最可能遇到的情況,R語言還可以讀取XML、網(wǎng)頁、數(shù)據(jù)庫(MySQL、Oracle等等)、SPSS和SAS等數(shù)據(jù),篇幅有限,就不一一介紹了,如果有同學(xué)需要這方面的幫助,我們也可以單獨(dú)再出一期和大家交流一下。當(dāng)然,大家在數(shù)據(jù)準(zhǔn)備和輸入過程也可能會(huì)遇到很多問題,歡迎和我們一起交流討論。 文末有本節(jié)課程的測(cè)試數(shù)據(jù)和代碼哦~~ 最后跟大家嘮幾句:任何事物的學(xué)習(xí)都要循序漸進(jìn),一口吃不了個(gè)胖子,希望大家能夠沉下心來,力爭每節(jié)課都能掌握,這樣等到最后課程結(jié)束的時(shí)候,再回過來看,你會(huì)突然發(fā)現(xiàn),自己已經(jīng)掌握了R語言的精髓??傊?,希望隨著課程的推進(jìn),希望大家每天都有所收獲。 |
|