自創(chuàng)立以來,R已經(jīng)成為統(tǒng)計(jì)計(jì)算和數(shù)據(jù)分析的一個(gè)優(yōu)秀軟件。該軟件的唾手可得以及范圍廣泛的程序包再加上隨時(shí)提供支持的R社區(qū),使R成為幾乎任何一種和統(tǒng)計(jì)相關(guān)的計(jì)算任務(wù)的一個(gè)極好選擇。然而,很多用戶,特別是那些有其它程序語言經(jīng)驗(yàn)的用戶,并沒有完全利用R的能力。由于R的特性,在其它程序語言中有用的方法在R中可能效率并不高。菲爾·斯佩克特的《R語言數(shù)據(jù)操作》展示了一系列將數(shù)據(jù)讀入R并進(jìn)行高效處理的方法。
除了內(nèi)置的函數(shù),還包括了可以從CRAN(綜合R檔案網(wǎng)絡(luò))下載的大量現(xiàn)成的程序包。展示的所有方法都利用了R的核心特性:對(duì)于通常的數(shù)據(jù)管理任務(wù)所提供的向量化運(yùn)算,高效的下標(biāo)使用,R函數(shù)的正確使用。
最有經(jīng)驗(yàn)的R用戶發(fā)現(xiàn),特別是在處理大型數(shù)據(jù)集時(shí)。將R和其它程序結(jié)合使用可能會(huì)有幫助,尤其是數(shù)據(jù)庫程序。因此,對(duì)于在R中使用數(shù)據(jù)庫,以及從電子表格和其它程序創(chuàng)建的數(shù)據(jù)集中提取數(shù)據(jù)的方法,這些都有詳細(xì)的論述。R中雖然有時(shí)會(huì)忽略字符操作,在這里卻作了詳細(xì)的論述。使得那些傳統(tǒng)地使用腳本語言解決的問題完全可以用R解決。對(duì)于那些有其它程序語言經(jīng)驗(yàn)的用戶提供了有效使用程序結(jié)構(gòu)——例如循環(huán)——的指南。
由于許多統(tǒng)計(jì)建模和圖形函數(shù)需要數(shù)據(jù)框形式的數(shù)據(jù),全書自始至終都提供了將普通函數(shù)的輸出結(jié)果轉(zhuǎn)化為數(shù)據(jù)框的技術(shù)。
通過使用各種不同的例子(其數(shù)據(jù)來源于R或者是輕松可得的模擬數(shù)據(jù)集),《R語言數(shù)據(jù)操作》可推薦給任何想從運(yùn)行簡單的例子提高到可以對(duì)實(shí)際的真實(shí)數(shù)據(jù)提供操作解決方案的R使用者。
菲爾·斯佩克特的《R語言數(shù)據(jù)操作》是近年來關(guān)于R軟件應(yīng)用的一部不可多得的好書,本書內(nèi)容具有綜合性、緊湊性和簡潔性,是R語言數(shù)據(jù)處理技術(shù)的綜合指南,對(duì)于統(tǒng)計(jì)應(yīng)用和理論研究都很有幫助。本書囊括了從各種不同格式的數(shù)據(jù)文件讀取數(shù)據(jù)的技術(shù)以及采用適當(dāng)?shù)腞內(nèi)部數(shù)據(jù)格式保存數(shù)據(jù)的技術(shù),對(duì)于諸如日期和時(shí)間型數(shù)據(jù)的處理、下標(biāo)工具的應(yīng)用、字符型數(shù)據(jù)的處理以及數(shù)據(jù)框的應(yīng)用技術(shù)都通過豐富的實(shí)際或模擬數(shù)據(jù)實(shí)例作了精彩講解。
譯者序前言第1章 R中的數(shù)據(jù) 1.1 模式和類 1.2 R的數(shù)據(jù)存儲(chǔ) 1.3 模式與類的檢測(cè) 1.4 R對(duì)象的結(jié)構(gòu) 1.5 對(duì)象的轉(zhuǎn)換 1.6 缺失值 1.7 缺失值的處理第2章 讀取和寫入數(shù)據(jù) 2.1 讀取向量和矩陣 2.2 數(shù)據(jù)框:read.table 2.3 逗號(hào)和制表符分隔的輸入文件 2.4 固定寬度輸入文件 2.5 從R對(duì)象中提取數(shù)據(jù) 2.6 連接 2.7 讀取大型數(shù)據(jù)文件 2.8 生成數(shù)據(jù) 2.8.1 序列 2.8.2 隨機(jī)數(shù) 2.9 排列 2.9.1 隨機(jī)排列 2.9.2 枚舉所有排列 2.10 序列的處理 2.11 電子表格 2.11.1 基于Windows的RODBC包 2.11.2 gdata程序包(所有平臺(tái)) 2.12 保存和加載R數(shù)據(jù)對(duì)象 2.13 處理二進(jìn)制文件 2.14 將R對(duì)象寫入ASCII格式的文件 2.14.1 write函數(shù) 2.14.2 write.table函數(shù) 2.15 從其它程序中讀取數(shù)據(jù)第3章 R與數(shù)據(jù)庫 3.1 SQL簡介 3.1.1 導(dǎo)航命令 3.1.2 SQL基礎(chǔ) 3.1.3 綜合匯總 3.1.4 兩個(gè)數(shù)據(jù)庫的合并 3.1.5 子查詢 3.1.6 修改數(shù)據(jù)庫記錄 3.2 ODBC 3.3 使用RODBC包 3.4 DBI包 3.5 訪問MySQL數(shù)據(jù)庫 3.6 執(zhí)行查詢 3.7 規(guī)范化的表 3.8 將數(shù)據(jù)讀入MySQL 3.9 更復(fù)雜的匯總第4章 日期 4.1 as.Date 4.2 chron包 4.3 POSIX類 4.4 日期的處理 4.5 時(shí)間間隔 4.6 時(shí)間序列第5章 因子 5.1 因子的使用 5.2 數(shù)值型因子 5.3 因子的操作 5.4 根據(jù)連續(xù)變量創(chuàng)建因子 5.5 基于日期和時(shí)間的因子 5.6 交互作用第6章 下標(biāo) 6.1 下標(biāo)的基礎(chǔ)知識(shí) 6.2 數(shù)值型下標(biāo) 6.3 字符型下標(biāo) 6.4 邏輯型下標(biāo) 6.5 矩陣和數(shù)組的下標(biāo) 6.6 矩陣的特殊函數(shù) 6.7 列表 6.8 數(shù)據(jù)框下標(biāo)第7章 字符操作 7.1 字符數(shù)據(jù)的基礎(chǔ)知識(shí) 7.2 顯示和連接字符串 7.3 處理分散的字符值 7.4 R中的正則表達(dá)式 7.5 正則表達(dá)式的基礎(chǔ)知識(shí) 7.6 拆分字符值 7.7 在R中使用正則表達(dá)式 7.8 替換和標(biāo)記第8章 數(shù)據(jù)匯總 8.1 table函數(shù) 8.2 匯總路線圖 8.3 將函數(shù)映射到向量或列表 8.4 將函數(shù)映射到矩陣或數(shù)組 8.5 基于組的函數(shù)映射 8.6 reshape包 8.7 R中的循環(huán)第9章 重塑數(shù)據(jù) 9.1 修改數(shù)據(jù)框中的變量 9.2 變量的重新編碼 9.3 recode函數(shù) 9.4 重塑數(shù)據(jù)框 9.5 reshape包 9.6 合并數(shù)據(jù)框 9.7 在merge的環(huán)境下索引
第1章R中的數(shù)據(jù)
1 1.1模式和類
R中的每一個(gè)對(duì)象包含多個(gè)屬性以描述該對(duì)象中信息的性質(zhì)。R數(shù)據(jù)中最重要的兩個(gè)屬性是模式和類。當(dāng)管理數(shù)據(jù)時(shí),重要的一點(diǎn)是了解R支持的不同類型的數(shù)據(jù)的差異,當(dāng)數(shù)據(jù)出現(xiàn)問題時(shí),問題往往在于對(duì)于特定的運(yùn)算這些數(shù)據(jù)不是正確的模式或類。
mode函數(shù)列示R中任何對(duì)象的模式,class函數(shù)列示對(duì)象的類。當(dāng)進(jìn)行數(shù)據(jù)操作時(shí),最常見的單個(gè)對(duì)象模式是數(shù)字、字符和邏輯。然而,由于R中的數(shù)據(jù)通常圍繞一個(gè)數(shù)據(jù)集(例如,一個(gè)矩陣或數(shù)組)旋轉(zhuǎn),往往會(huì)遇到其他模式。在確定如何在R中存儲(chǔ)數(shù)據(jù)時(shí),其中一個(gè)重要的考慮就是所研究數(shù)據(jù)的模式。有的對(duì)象(如矩陣或其他一些陣列)要求其中的所有數(shù)據(jù)屬于相同的模式,有的(像列表和數(shù)據(jù)框)允許單一的對(duì)象中存在多種模式的數(shù)據(jù)。
除了mode和class函數(shù),typeof函數(shù)有時(shí)可以提供關(guān)于對(duì)象類型的額外信息,雖然其用處一般地說來不像mode和class提供的信息那樣大。
當(dāng)規(guī)劃數(shù)據(jù)怎樣讀入R時(shí)另一個(gè)考慮是類型數(shù)據(jù)。R提供因子類來存儲(chǔ)這些類型的數(shù)據(jù),而在統(tǒng)計(jì)建模和制圖函數(shù)中對(duì)因子自動(dòng)進(jìn)行特殊處理。因?yàn)镽只需要將每個(gè)水平存儲(chǔ)一次,所以作為因子存儲(chǔ)的值比普通存儲(chǔ)值需要較少的存儲(chǔ)空間。如果您檢查一個(gè)因子對(duì)象的模式,即使它可能顯示為字符數(shù)據(jù),你會(huì)發(fā)現(xiàn),它始終是數(shù)值型的,因此當(dāng)對(duì)因子進(jìn)行操作時(shí),應(yīng)該特別注意。class函數(shù)或者在1.3節(jié)描述的其它謂詞函數(shù)之一可用于識(shí)別因子,只要這些因子存儲(chǔ)在R中。關(guān)于因子的更多信息可在第5章找到。
2 另一個(gè)重要的數(shù)據(jù)類型是日期和時(shí)間。雖然這類信息可以作為一個(gè)簡單的字符形式存儲(chǔ),但是這種形式很難操作。R提供了一些機(jī)制來存儲(chǔ)日期,包括內(nèi)置的Date,POSIXlt和POSIXct類,以及R使用者貢獻(xiàn)的chron程序包。其間的差別及日期和時(shí)間的操作信息在第4章有描述。
最后,最常遇到的數(shù)據(jù)模式是列表。列表時(shí)R中最靈活的數(shù)據(jù)存儲(chǔ)方式,因?yàn)樗梢赃m應(yīng)不同模式和長度的對(duì)象。R中的許多函數(shù)用列表的形式來保存結(jié)果,而且列表提供了累積信息增量的一種很有吸引力的方式。當(dāng)你要列表的各個(gè)組成部分的模式時(shí),可以使用sapply函數(shù)(第8.3節(jié)詳細(xì)討論),如下例所示:
> mylist = list(a=c(1,2,3),b=c("cat","dog","duck"),
+ d=factor("a","b","a"))
> sapply(mylist,mode)
a b d
"numeric" "character" "numeric"
> sapply(mylist,class)
a b d
"numeric" "character" "factor"