第二章R中的數(shù)據(jù)輸入PPT課件_第1頁
第二章R中的數(shù)據(jù)輸入PPT課件_第2頁
第二章R中的數(shù)據(jù)輸入PPT課件_第3頁
第二章R中的數(shù)據(jù)輸入PPT課件_第4頁
第二章R中的數(shù)據(jù)輸入PPT課件_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第二章 R中的數(shù)據(jù)輸入 我們學(xué)習(xí)如何把數(shù)據(jù)錄入R,并把數(shù)據(jù)系統(tǒng)地轉(zhuǎn)化為標量(單值)、向量、矩陣、數(shù)據(jù)筐或者列表。 同時還學(xué)習(xí)如何從Excel、ascii文件、數(shù)據(jù)庫和其它統(tǒng)計程序中載入數(shù)據(jù)。2.1 R中的第一步 2.1.1 小型數(shù)據(jù)庫中的數(shù)據(jù)錄入 我們從數(shù)量足夠小的數(shù)據(jù)錄入到R中的工作開始。 使用這樣一個數(shù)據(jù)庫(康涅狄格大學(xué)Chris Elphick),它來自大概1100只沙鷗的7種身體測量數(shù)據(jù)(如頭和翅膀的大小、踝骨的長度、體重等等)。 為了方便起見,我們僅使用其中8只鳥的4種形態(tài)參數(shù)。表表2.1 82.1 8只鳥的只鳥的4 4種形態(tài)參數(shù)。符號種形態(tài)參數(shù)。符號NANA代表缺失值,被代表缺失值

2、,被測量的參數(shù)有翅膀的長度(翼弦)的長度,腿的尺寸測量的參數(shù)有翅膀的長度(翼弦)的長度,腿的尺寸(踝骨尺寸),頭的尺寸(從嘴到后腦)和體重(踝骨尺寸),頭的尺寸(從嘴到后腦)和體重翼弦翼弦踝骨踝骨頭頭體重體重595922.322.331.231.29.59.5555519.719.730.430.413.813.853.553.520.820.830.630.614.814.8555520.320.330.330.315.215.252.552.520.820.830.330.315.515.557.557.521.521.530.830.815.615.6535320.620.632.532

3、.515.615.6555521.521.5NANA15.715.7 將數(shù)據(jù)錄入R最簡單的一個方法就是以標量(僅含一個值的變量)形式將數(shù)據(jù)一一輸入,但此方法比較繁瑣。 比如,將翅膀長度的前5個觀察值錄入R,需錄入: a - 59 b - 55 c - 53.5 d - 55 e - 52.5 程序中,符號-可以用=代替。 這些命令可以直接從文本編輯器中復(fù)制到R中,不需要其它改變。 此時,如果要查看R的計算結(jié)果,可以輸入a,然后敲回車鍵。 a 1 59 這種方法的問題是大量的數(shù)據(jù)會很快用完所有的字母符號,并且,以a、b、c等字母作為變量名變量名表示什么意義是某有多大幫助的。 因此可以用如下變量名

4、: Wing1 - 59 Wing2 - 55 Wing3 - 53.5 Wing4 - 55 Wing5 - 52.5 如果要輸入剩余的數(shù)據(jù),則需要更多的變量名。 一旦定義了一個變量并且對其賦值后,就可以用它來進行計算。 例如,下面這些都是有效的命令: sqrt(Wing1) 2*Wing1 Wing1+Wing2 Wing1+Wing2+Wing3+Wing4+Wing5 (Wing1+Wing2+Wing3+Wing4+Wing5)/5 此時,雖然R進行了計算,但它并沒有存儲結(jié)果,所以最好是定義新的變量: SQ.wing1 -sqrt(Wing1) Mu1.w1 - 2*Wing1 Su

5、m.12 - Wing1+Wing2 SUM12345 - Wing1+Wing2+Wing3+Wing4+Wing5 Av - (Wing1+Wing2+Wing3+Wing4+Wing5)/5 以上這些變量名僅僅是示范,你可以使用任何名字來代替,不過需要注意,.也是變量名的一部分。 建議使用能幫助記憶具體代表什么的變量名,例如SQ.wing1表示第一只鳥翅膀長度的平方根。 有時,在選擇變量名的時候需要一定的想象力。 但是注意,一些符號是不允許出現(xiàn)在變量名中的,例如“$,%,*,+,-,( ), ,#,!,?,等。 因為這些符號中的大部分都是運算符。 如果定義了 SQ.wing1 - sqr

6、t (Wing1) 若要顯示SQ.wing1的值,只需輸入: SQ.wing1 1 7.681146 或者你可以把需要執(zhí)行的命令放在圓括號內(nèi),R將會即刻計算出結(jié)果: (SQ.wing1 - sqrt (Wing1) 1 7.6811462.1.2 應(yīng)用C函數(shù)連接數(shù)據(jù) 如上所述,對于4種形態(tài)參數(shù)的8個觀測值,我們需要32個變量名,而R允許在一個變量名中存儲多個值,這個任務(wù)由c( )函數(shù)來完成。 這里c代表連接(Concatenete). 它可以這樣使用: Wingcrd - c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55) 這里你可以在逗號的任意一邊加上空格以增加代

7、碼的可讀性。 也可以在-任意一邊加空格。 需要注意的是c( )使用的空格是圓括號( ),而不是方括號 或者大括號 。 這時,c( )函數(shù)生成了一個長度是8的向量。 如果要查看Wingcrd的一個值,可以輸入輸入: Wingcrd 1 1 59 如果需要查看Wingcrd的前5個值,可以輸入: Wingcrd 1:5 1 59.0 55.0 53.5 55.0 52.5 如果需要查看除了第二個值之外的其他值,可以輸入: Wingcrd -2 1 59.0 53.5 55.0 52.5 57.5 53.0 55.0 R有很多內(nèi)置的函數(shù),最基本的有例如sum,mean,max,min,median,

8、var和sd等等,可以通過如下的方法來使用: sum(Wingcrd) 1 440.5 我們也可以將這個和存在一個新的變量中, S.win - sum(Wingcrd) S.win 1 440.5 將表2.1中的剩下的3個形態(tài)參數(shù)輸入R。 Tarsus - c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5, 20.6, 21.5) Head - c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8, 32.5, NA) Wt - c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6, 15.6, 15.7) 這里我們付出了額外的空間

9、,即每一個命令都占用了兩行,只要你在第一行結(jié)束的時候使用反斜線或者是逗號,R都能識別這是一條命令。 一般來說,R中的變量名最好使用大寫字母開頭,這樣可以避免將它和一些內(nèi)部函數(shù)名混淆,因為大部分內(nèi)部函數(shù)都不是以大寫字母開頭。 需要注意的是這里有一只鳥的頭的尺寸是沒有測量的,我們用NA來表示,這時如果調(diào)用內(nèi)部函數(shù),NA的出現(xiàn)可能導(dǎo)致計算結(jié)果的錯誤。 例如: sum(Head) 1 NA 當然,調(diào)用其它如mean,min,max等函數(shù)會得到同樣錯誤的結(jié)果 為了弄清楚為什么得到這樣的錯誤結(jié)果,可以鍵入?sum,就會得到相關(guān)內(nèi)容 在向量中如果有一個缺失值的話,默認選項na.rm= FALSE將會導(dǎo)致R函

10、數(shù)sum返回NA(rm表示移除(remove),為了避免這種情況,我們可以使用na.rm=TRUE, sum(Head, na.rm = TRUE) 1 216.12.1.3 使用c,cbind和rbind結(jié)合變量 我們已經(jīng)有了4列數(shù)據(jù),每列含有8只鳥的觀察值,這4列數(shù)據(jù)分別以變量Wingcrd,Tarsus,Head和Wt來標記。 c函數(shù)可以用來連接這些數(shù)據(jù),同時連接這些數(shù)據(jù)中的8個值,具體操作如下: BirdData - c(Wingcrd, Tarsus, Head, Wt) 鍵入 BridData BirdData是一個長度為32(48)的單個向量,符號1、15和29表示新的一行的第一

11、個元素的索引編號,根據(jù)電腦顯示器的大小不同可能有所不同。 此時,R將包含缺失值的32個觀察值生成了一個單個向量,并沒有區(qū)別這些值都屬于哪一個變量。 為了實現(xiàn)這一點,可以生成一個長度是32的向量,命名為Id(表示identity),給它賦如下這些值。 Id - c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4) Id向量的作用是指出具有相同Id值的觀察值屬于同一種形態(tài)變量。 然而,當針對大數(shù)據(jù)庫的時候,生成這樣的一個向量是很費時間。 R具有簡化這個過程的

12、函數(shù),我們需要重復(fù)地輸入14,每個8次: Id - rep(c(1, 2, 3, 4), each = 8) Id 這個函數(shù)產(chǎn)生了上述相同的結(jié)果,符號rep代表重復(fù)(repeat),它的使用還可以簡化為: Id - rep(1:4, each = 8) Id 還可以使用seq函數(shù)來實現(xiàn)這個目的,例如,命令 a - seq(from = 1, to = 4, by = 1) a 因此,對于前面所述的鳥類的觀察值,我們同樣可以使用如下的命令: a - seq(from = 1, to = 4, by = 1) rep(a, each = 8) 此時,你可能認為我們使用了過多的方法,從而使事情變得復(fù)

13、雜起來。 但是,在R中一些函數(shù)的使用需要提供類似于表2.1那樣的數(shù)據(jù)(例如,對于主成分分析或多維尺度分析的多元分析函數(shù)), 而另一些函數(shù)的使用需要提供一個單獨向量和識別這組觀察值的一個變量(例如上述的Id),這樣的函數(shù)主要包括t-檢驗,單因子方差分析,線性回歸以及一些作圖工具,如lattice包中的xyplot。 所以,熟練地使用rep函數(shù)將可以節(jié)省很多時間。 至此,我們僅僅實現(xiàn)了數(shù)字的連接,假如我們想生成一個長度為32的向量Id,這個向量包含了單詞Wingcrd8次,Tarsus8次等等。 我們先產(chǎn)生一個名為VarNames的新變量,這個變量包含了前面所提到的4個形態(tài)參數(shù): VarNames

14、 - c(Wingcrd, Tarsus, Head, Wt) VarNames 1 Wingcrd Tarsus Head Wt 注意這些都只是名稱,而不是含有數(shù)字的變量。 然后,我們再利用rep函數(shù)來生成所需要的向量。 Id2 - rep(VarNames, each = 8) Id2 這里Id2是一個被賦予了具有固定順序的名字的字符串,它和Id的區(qū)別僅僅是所包含內(nèi)容的名稱不同而已。 注意在這里丟掉each,否則你將看到: rep(VarNames, 8) c函數(shù)是我們結(jié)合數(shù)據(jù)或者變量的一種選擇,另一種選擇是cbind函數(shù),它的作用是將所結(jié)合的變量以列的形式輸出。 例如,我們將cbind函

15、數(shù)的輸出存儲在變量Z中,然后鍵入Z并回車,將看到以列的形式顯示的數(shù)值: Z - cbind(Wingcrd, Tarsus, Head, Wt) Z 當我們有某些特殊要求的時候,這樣輸出數(shù)據(jù)將是很有必要的。 例如,需要做主成分分析時。 假設(shè)需要訪問Z的第一列,則可以使用命令Z, 1 Z, 1 同樣,也可以使用: Z1:8,1 如需訪問第二行,則可以輸入: Z2, 也可以輸入 Z2,1:4 Z1,1 Z, 2:3 X - Z4,4 Y - Z, 4 W - Z, -3 D - Z, c(1,3,4) E - Z, c(-1, -3) 如果想知道Z的維數(shù),可以使用: dim(Z) 與cbind函數(shù)

16、將變量以列的形式進行整理的功能類似,rbind函數(shù)具有將數(shù)據(jù)以行進行結(jié)合的作用。 我們可以這樣使用它: Z2 - rbind(Wingcrd, Tarsus, Head, Wt) Z22.1.4 使用vector函數(shù)結(jié)合數(shù)據(jù) vector函數(shù)的作用與c函數(shù)類似,它可以用來代替c函數(shù)。 例如我們要在R中生成一個長度為8,包含了所有8只鳥的Wingcrd數(shù)據(jù)的一個向量,我們可以像如下這么做。 W - vector(length = 8) W1 - 59 W2 - 55 W3 - 53.5 W4 - 55 W5 - 52.5 W6 - 57.5 W7 - 53 W8 - 55 W vector函數(shù)的

17、優(yōu)點是我們可以事先定義向量的長度,這一點有時是很有用的,例如做循環(huán)運算的時候。 但是,一般情況下還是使用c函數(shù)結(jié)合數(shù)據(jù)比較簡單。 與c函數(shù)的輸出類似,我們可以使用 W1 W1:4 W2:6 W-2之類的命令。2.1.5 使用矩陣結(jié)合數(shù)據(jù) 為了代替向量顯示4個變量Wingcrd,Tarsu,Head和Wt,每個長度為8,我們可以生成一個84的矩陣包括上述數(shù)據(jù)。 該矩陣的生成可以通過如下命令: Dmat - matrix(nrow = 8, ncol = 4) Dmat 注意到這里的Dmat是一個僅含有NA的84的矩陣,需要填入適當?shù)臄?shù)值,我們可以這樣來進行操作: Dmat, 1 - c(59,

18、55, 53.5, 55, 52.5, 57.5, 53, 55) Dmat, 2 - c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5, 20.6, 21.5) Dmat, 3 - c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8, 32.5, NA) Dmat, 4 - c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6, 15.6, 15.7) Dmat 我們可以使用colnames函數(shù)來給Dmat的列加上名稱: colnames(Dmat) - c(Wingcrd, Tarsus, Head, Wt) Dmat2.1.

19、6 使用data.frame函數(shù)結(jié)合數(shù)據(jù) 目前為止,我們已經(jīng)使用了c, cbind, rbind, vector和matrix函數(shù)來結(jié)合數(shù)據(jù)。 另外一個可供選擇的就是數(shù)據(jù)框。 可以使用數(shù)據(jù)框結(jié)合具有相同長度的變量,而數(shù)據(jù)筐的每一行就包含有同一樣本的不同觀察值,這一點上它和matrix或者cbind函數(shù)是比較類似的。使用前面所講的鳥的4種形態(tài)參數(shù),可以生成一個數(shù)據(jù)框: Dfrm - data.frame(WC = Wingcrd, TS = Tarsus, HD = Head, W = Wt) Dfrm 數(shù)據(jù)框的優(yōu)點是可以在不影響原始數(shù)據(jù)的基礎(chǔ)上改變數(shù)據(jù)。 例如,我們可以在數(shù)據(jù)筐Dfrm中結(jié)合原

20、始數(shù)據(jù)(已重命名)的體重值和體重值的平方根: Dfrm - data.frame(WC = Wingcrd, TS = Tarsus, HD = Head, W = Wt, Wsq = sqrt(Wt) 注意,在c函數(shù)所生成的變量Wt和數(shù)據(jù)框Dfrm中的變量W是兩個不同的實體。為了驗證這一點,我們移除變量Wt(這是在c函數(shù)中輸入的變量): rm(Wt) 如果此時再鍵入Wt,R將會提示錯誤: Wt 錯誤: 找不到對象Wt 但是變量W卻還存在于數(shù)據(jù)框Dfrm中: Dfrm$W 數(shù)據(jù)框較之cbind函數(shù)和matrix函數(shù)具有可以結(jié)合不同類型的數(shù)據(jù)的功能,所以,它的使用還是很必要的。2.1.7 使用l

21、ist函數(shù)結(jié)合數(shù)據(jù)2.2 數(shù)據(jù)的載入 對于大型的數(shù)據(jù)庫,像我們前面所講的將其逐個鍵入R中是很不現(xiàn)實的。 接下來的內(nèi)容將講述各種各樣的載入數(shù)據(jù)的方法。 我們將數(shù)據(jù)分為大型數(shù)據(jù)庫和小型數(shù)據(jù)庫以區(qū)別對待,并考慮它們是否存儲于Excel、ascii文本文件、數(shù)據(jù)庫程序或者其它統(tǒng)計包中。2.2.1 Excel中的數(shù)據(jù)載入 一般情況下有兩種將數(shù)據(jù)從Excel(或電子數(shù)據(jù)表、數(shù)據(jù)庫程序)載入R的方法。 第一種比較簡單,也是推薦使用的,步驟是: 1)將Excel中的數(shù)據(jù)準備好; 2)將其提取到制表符分隔的ascii文件中; 3)關(guān)閉Excel; 4)使用read.table函數(shù)將數(shù)據(jù)載入到R中。 第二種方法是

22、一個專門的R程序包,RODBC,它可以訪問Excel中選定的行和列。 應(yīng)該注意的是Excel并不是最適合于處理大型數(shù)據(jù)庫的軟件,因為它的列是有限的。2.2.1.1 Excel中數(shù)據(jù)準備 為了簡單起見,我們建議將數(shù)據(jù)排列為樣本-變量的形式。 列表示各種變量; 行表示各種樣本、觀察值、案例、對象或者其它 稱之為樣本單元的東西。 以NA(大寫)表示缺失值; 一般最好以Excel中的第一列來識別樣本單元,第一行為變量名。 最好避免使用包含如下一些符號的名稱:$,%,&,*,(,),_,!,:,同樣也要避免使用包含空格的名稱(字段或數(shù)值)。 盡量使用簡單的名稱,不要太長,否則將會使圖表中因為包含

23、太長名字而不易識別。2.2.1.2 數(shù)據(jù)提取到制表符分隔的ascii文件 在Excel中,依次進入文件-另存為-保存類型,選擇文本文件(制表符分隔),將數(shù)據(jù)提取到一個制表符分隔的ascii文件中,存儲目錄為D:RBook。 在這一步中建議關(guān)閉Excel以方便其它程序訪問新生成的文本文件。 警告:在某些情況下,如果你在電子數(shù)據(jù)表里輸入了注釋,Excel有在ascii文件中額外一些全是NA列的趨勢。在R中,這些列將會以NA出現(xiàn),為了避免這種情況的發(fā)生,在提取數(shù)據(jù)前先刪除這樣的列。2.2.1.3 read.table函數(shù)的使用 當制表符分隔的ascii文件中沒有空內(nèi)容或者沒有包含空格的名稱時,我們就

24、可以將數(shù)據(jù)載入R中。 使用read.table函數(shù),其基本的用法如下: Squid - read.table(file =D:RBooksquid.txt, header = TRUE) 這個命令實現(xiàn)了把數(shù)據(jù)從squid.txt文件中讀取出來,以數(shù)據(jù)框的形式存儲到Squid中。 函數(shù)read.table中的header = TRUE選項表示第一行包括的標簽。如果你的文件中沒有標簽,可以將它改為header = FALSE。 還有另外一種識別這種文本文件地址的方法: Squid - read.table(file =D:/RBook/squid.txt, header = TRUE) 這兩種命令

25、的區(qū)別在于斜線的不同。 如果在這一步出現(xiàn)了錯誤信息,可以首先檢查文件名和目錄路徑是否正確。 如果目錄的路徑長一些,可以右擊文件squid.txt,選擇屬性。在這里直接把整個目錄路徑(包括文件名)復(fù)制粘貼到R的文本編輯器中。 但是不要忘了多加一條斜線。 警告:默認情況下,R認為ascii文本文件中的數(shù)據(jù)使用點作為小數(shù)點。事實上,函數(shù)read.table的使用是這樣的: Squid - read.table(file =D:/RBook/squid.txt, header = TRUE, dec = .) 如果你使用逗號作為小數(shù)點,應(yīng)該將最后一個選項改為dec =,并從新執(zhí)行命令。 如果你還需要從

26、同一目錄下讀取更多的文件,可以利用setwd函數(shù)設(shè)置一下工作目錄將會是更有效的方法。 此時,你就可以省列掉read.table函數(shù)中的目錄路徑,如下所示: setwd(D:RBook) Squid - read.table(file = squid.txt, header = TRUE) 除了read.table函數(shù)外,還可以使用通過scan函數(shù)來載入數(shù)據(jù)。 它們的不同點是read.table函數(shù)把數(shù)據(jù)存儲在數(shù)據(jù)框中,而scan函數(shù)把數(shù)據(jù)存儲在矩陣中。 在數(shù)據(jù)都是數(shù)值的情況下,scan函數(shù)的運行速度更快(對于大數(shù)據(jù)庫而言,一般指數(shù)百萬個數(shù)據(jù))。 對于小數(shù)據(jù)庫而言,就沒有必要討論運行速度的必要。2.2.2 從其它統(tǒng)計包中訪問數(shù)據(jù) R還可以從其它統(tǒng)計程序包中載入數(shù)據(jù),例如,Minitab,S-PLUS,SA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論