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