第三講-因子列表數(shù)據(jù)框與數(shù)據(jù)讀寫_第1頁
第三講-因子列表數(shù)據(jù)框與數(shù)據(jù)讀寫_第2頁
第三講-因子列表數(shù)據(jù)框與數(shù)據(jù)讀寫_第3頁
第三講-因子列表數(shù)據(jù)框與數(shù)據(jù)讀寫_第4頁
第三講-因子列表數(shù)據(jù)框與數(shù)據(jù)讀寫_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、01020304050 -2-1012 Simple Use of Color In a Plot Just a Whisper of a Label -1.0-0.50.00.51.0 sin and cos Phase Angle sin Sepal.Length 2.03.04.0 7.5 2.03.04.0 Sepal.Width Petal.Length 1234567 7.5 1234567 Petal.Width Edgar Andersons Iris Data Math can be beautiful

2、 . cosr 2er 6 實(shí)驗(yàn)內(nèi)容 1、數(shù)據(jù)表示方法 2、應(yīng)用實(shí)例 3、實(shí)驗(yàn)作業(yè) 學(xué)習(xí)R語言中離散變量、混合數(shù)據(jù)的表示方法 實(shí)驗(yàn)?zāi)康?因子、列表、數(shù)據(jù)框與數(shù)據(jù)的讀 寫 因子(factor)和有序因子 統(tǒng)計中的變量重要類別: 區(qū)間變量和名義變量、有序變量。 區(qū)間變量取連續(xù)的數(shù)值,可以進(jìn)行求和、平均等 運(yùn)算。 名義變量和有序變量取離散值,既可用數(shù)值代表 也可用字符型值,其具體數(shù)值沒有數(shù)量意義,不 能用于加減乘除計算而只能用來分類或者計數(shù)。 名義變量比如性別、省份、職業(yè),有序變量比如 班級名次、質(zhì)量等級。 因?yàn)殡x散變量有各種不同表示方法,在R中為統(tǒng) 一起見使用因子(factor)來表示這種分類變量

3、。還 提供了有序因子(ordered factor)來表示有序變量 。 因子是一種特殊的字符型向量,其中每一個元素 取一組離散值中的一個,而因子對象有一個特殊 屬性levels表示這組離散值(用字符串表示)。 例如: x y y 1 男 女 男 男 女 Levels: 男 女 函數(shù)factor()用來把一個向量編碼成為一個因子 。 一般形式為: factor(x, levels = sort(unique(x), na.last = TRUE), labels, exclude = NA, ordered = FALSE) 可以自行指定各離散取值水平(levels),不指 定時由x的不同值來求

4、得。 labels可以用來指定各水平的標(biāo)簽,不指定時用 各離散取值的對應(yīng)字符串。 exclude參數(shù)用來指定要轉(zhuǎn)換為缺失值(NA)的 元素值集合。 ordered取真值時表示因子水平(Levels)是有次 序的。 可以用is.factor()檢驗(yàn)對象是否因子,用as.factor() 把一個向量轉(zhuǎn)換成一個因子。 x y factor (x, order=T); 1 4 2 2 3 Levels: 2 3 factor(x,label=c(red, black,white) 1 white red red black # red代表2,black 代表3, white代 表4 Levels: r

5、ed black white factor(x,label=c(red,black,white),order=T ); 1 white red red black Levels: red black white # 234 故有 red black factor(x, exclude=3,order=T); 1 4 2 2 # exclude的那個值顯示為 Levels: 2 xy=factor(x,levels=sort(unique(x),decreasing=T),l abels=c(男, 女), order=F); y 1 男 女 男 男 女 Levels: 男 女 x y=facto

6、r(x,levels=c(1,0), labels=c(男, 女), order=F) y 1 男 女 男 男 女 Levels: 男 女 用函數(shù)levels()可以得到因子的水平 levels(y); 1 男 女 因子的基本統(tǒng)計是頻數(shù)統(tǒng)計,用函數(shù)table()來 計數(shù)。例如, sex = factor(c(男, 女, 男, 男, 女) ; res.tab res.tab 1 男 女 3 2 # 表示男性3人,女性2人。table()的結(jié)果 是一個帶元素名的向量,元素名為因子水平, 元素值為該水平的出現(xiàn)頻數(shù)。 mode(res.tab); 1 numeric 可以用兩個或多個因子進(jìn)行交叉分類。

7、比如 ,性別(sex)和職業(yè)(job)交叉分組可以 用table(sex, job)來統(tǒng)計每一交叉類的頻數(shù), 結(jié)果為一個矩陣,矩陣帶有行名和列名,分 別為兩個因子的各水平名。 job=factor(c(teacher, worker,worker, worker,teacher); sex = factor(c(男, 女, 男, 男, 女); table(sex, job); job sex teacher worker 男 1 2 女 1 1 age=factor(c(old,old, young,old,young); table(sex, job, age); 因子可以用來作為另外的同長

8、度變量的分類變 量。比如,假設(shè)sex是5個學(xué)生的性別,h是他們 的身高向來 sex = factor(c(男, 女, 男, 男, 女) ; h tapply(h, sex, mean); 男 女 168.3333 164.5000 可以求按性別分類的身高平均值。 這樣用一個等長的因子向量對一個數(shù)值向量分 組的辦法叫做不規(guī)則數(shù)組。 函數(shù)tapply的基本用法為: tapply (X, INDEX, FUN = NULL, ., simplify = TRUE ); X是向量;INDEX是和X同等長度的因 子,F(xiàn)UN是要執(zhí)行的函數(shù),simplify取默認(rèn) 的TRUE,返回一個標(biāo)量,取FALSE時,

9、返 回一個列表list。 注意比較: tapply(h, sex, mean, simplify=F); $男 1 168.3333 $女 1 164.5 因子還可以用gl()函數(shù)來產(chǎn)生,其用法為: gl(n, k, length=n*k, labels=1:n, ordered=FALSE) n是水平數(shù); k為重復(fù)的次數(shù); length是結(jié)果的 長度; labels是一個n維向量,表示因子的水平 ;ordered是邏輯變量,表示是否為有序因子, 默認(rèn)值為FALSE。 gl(3,5) 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 gl(3,1,9)

10、 1 1 2 3 1 2 3 1 2 3 Levels: 1 2 3 gl(3,1,8,labels=c(red,blue,white) 1 red blue white red blue white red blue Levels: red blue white 列表(list)定義 列表是一種特別的對象集合,它的元素也由序號 (下標(biāo))區(qū)分,但是各元素的類型可以是任意對 象,不同元素不必是同一類型。元素本身允許是 其它復(fù)雜數(shù)據(jù)類型,比如,列表的一個元素也允 許是列表。 列表元素用“列表名下標(biāo)”的格式引用。 但是,列表不同于向量,我們每次只能引用一個 元素,如rec1:2的用法是不允許的。 注

11、意:“列表名下標(biāo)”或“列表名下標(biāo)范圍” 的用法也是合法的,但其意義與用兩重括號的記 法完全不同,兩重記號取出列表的一個元素,結(jié) 果與該元素類型相同,如果使用一重括號,則結(jié) 果是列表的一個子列表(結(jié)果類型仍為列表)。 rec = list(name=李明, age=30, scores=c(85, 76, 90) rec $name 1 李明 $age 1 30 $scores 1 85 76 90 rec1 $name 1 李明 rec1 1 李明 rec2 $age 1 30 rec2 1 30 rec3 $scores 1 85 76 90 rec3 1 85 76 90 rec31:2

12、1 85 76 mode(rec1) 1 list mode(rec1) 1 character 在定義列表時如果指定了元素的名字(如rec中 的name,age,scores),則引用列表元素還可以 用它的名字作為下標(biāo),格式為“列表名元素名 ”,如: recage 1 30 另一種格式是“列表名$元素名”,如: rec$age 1 30 其中“元素名”可以簡寫到與其它元素名能夠 區(qū)分的最短程度,比如“rec$s”可以代表 “rec$score”。 這種寫法方便了交互運(yùn)行,編寫程序時一般不 用簡寫,以免降低程序的可讀性。 使用元素名的引用方法可以讓我們不必記住某一 個下標(biāo)代表哪一個元素,而直接

13、用易記的元素名 來引用元素。 定義列表使用list()函數(shù),每一個自變量變成列表 的一個元素,自變量可以用“名字值”的方式 給出,即給出列表元素名。 構(gòu)造列表的一般格式為 list(name1=對象1, name2=對象2,); 練習(xí):構(gòu)建下面的列表,嘗試調(diào)用各種列表元素 的各個方法 family rec$age rec$age rec$sex rec6 rec 第五號元素因?yàn)闆]有定義所有其值是“NULL”, 這是空對象的記號。 如果rec是一個向量,則其空元素為“NA”,這是 缺失值的記號。從這里我們也可以體會“NULL” 與“NA”的區(qū)別。 幾個列表可以用連接函數(shù)c()連接起來,結(jié)果仍為

14、一個列表,其元素為各自變量的列表元素。如: list.ABC rec1= list(name=“李雷, age=30, scores=c(76, 90) rec2= list(name=“韓美美”, age=28, scores=c(20, 25) rec3= list(name=“Lucy”, age=28, scores=c(30, 50) rec4= list(name=“Lily”, age=29, scores=c(44, 66) rec.all rec.all$name 1 “李雷” rec.allname 1 李雷“ rec.allname $name 1 李雷 rec.all4

15、 $name 1 韓美美 rec.all4 1“韓美美” 數(shù)據(jù)框(data.frame) 數(shù)據(jù)框是R的一種數(shù)據(jù)結(jié)構(gòu)。它通常是矩陣形式 的數(shù)據(jù),但矩陣各列可以是不同類型的。數(shù)據(jù)框 每列是一個變量,每行是一個觀測。 數(shù)據(jù)框有更一般的定義。它是一種特殊的列表對 象各列表成員必須是向量(數(shù)值型、字符型、邏 輯型)、因子、數(shù)值型矩陣、列表,或其它數(shù)據(jù) 框。向量、因子成員為數(shù)據(jù)框提供一個變量,如 果向量非數(shù)值型則會被強(qiáng)制轉(zhuǎn)換為因子,而矩陣 、列表、數(shù)據(jù)框這樣的成員為新數(shù)據(jù)框提供了和 其列數(shù)、成員數(shù)、變量數(shù)相同個數(shù)的變量。作為 數(shù)據(jù)框變量的向量、因子或矩陣必須具有相同的 長度(行數(shù))。 盡管如此,我們一般還

16、是可以把數(shù)據(jù)框看作是一 種推廣了的矩陣,它可以用矩陣形式顯示,可以 用對矩陣的下標(biāo)引用方法來引用其元素或子集。 數(shù)據(jù)框生成 數(shù)據(jù)框可以用data.frame()函數(shù)生成,其用法與 list()函數(shù)相同,各自變量變成數(shù)據(jù)框的成分, 自變量可以命名,成為變量名。例如: d=data.frame(name=c(趙, 錢, 孫, 李, 王),age=c(20,21,22,21,20),height= c(170,171,175,165,181),gender=c(男, 女, 男 , 女, 男 ) d d name age height gender 1 趙 20 170 男 2 錢 21 171 女

17、3 孫 22 175 男 4 李 21 165 女 5 王 20 181 男 d1 name 1 趙 2 錢 3 孫 4 李 5 王 d1 1 趙 錢 孫 李 王 Levels: 李 錢 孫 王 趙 # 可見,d里的非數(shù) 值向量已經(jīng)變成因 子了 d22:3 1 21 22 如果一個列表的各個成分滿足數(shù)據(jù)框成 分的要求,它可以用as.data.frame()函數(shù) 強(qiáng)制轉(zhuǎn)換為數(shù)據(jù)框。比如,上面的d如果 先用list()函數(shù)定義成了一個列表,就可 以強(qiáng)制成為一個數(shù)據(jù)框。 d1 d2 x y y; V1 V2 V3 1 1 3 5 2 2 4 6 mode(x); 1 “numeric” mode(y

18、); 1“ list” #數(shù)據(jù)框的mode仍然是list 數(shù)據(jù)框引用 引用數(shù)據(jù)框元素的方法與引用矩陣元素的方法 相同,可以使用下標(biāo)或下標(biāo)向量,也可以使用 名字或名字向量。如d1:2, 2:3(第一二行的第 二三列對應(yīng)的元素)。數(shù)據(jù)框的各變量也可以用 按列表引用(即用雙括號 或$符號引用, 和 列表的引用方法一致,此處不再贅述)。 數(shù)據(jù)框的變量名(列的名字)由屬性names定義。 數(shù)據(jù)框的各行也可以定義名字,可以用 rownames屬性定義。如: names(d) 1 name age height gender rownames(d) 1 1 2 3 4 5 table(d4) 1 男 女 3

19、 2 table(d4) #兩種統(tǒng)計結(jié)果是一致的 1 男 女 3 2 tapply(d3,d4, mean) 1 男 女 175.3333 168.0000 d3/d2 1 8.500000 8.142857 7.954545 7.857143 9.050000 attach()函數(shù) 數(shù)據(jù)框的主要用途是保存統(tǒng)計建模需要的數(shù)據(jù) 。R的統(tǒng)計建模功能都需要以數(shù)據(jù)框?yàn)檩斎霐?shù) 據(jù)。我們也可以把數(shù)據(jù)框當(dāng)成一種矩陣來處理 。 在使用數(shù)據(jù)框的變量時可以用“數(shù)據(jù)框名$變 量名”的記法。但是,這樣使用較麻煩,R提 供了attach()函數(shù)可以把數(shù)據(jù)框“連接”入當(dāng)前 的名字空間。例如, attach(d) r d$

20、r d 為了取消連接,只要調(diào)用detach()(無參數(shù)即可 )。 列表與數(shù)據(jù)框的編輯 edit()函數(shù)可以用來編輯數(shù)據(jù)框 edit(d) d.new print(ABC, quote=F); 1 ABC print(ABC, quote=T); 1 ABC print()函數(shù)是一個通用函數(shù),即它對不同的自變 量有不同的反應(yīng)。對各種特殊對象如數(shù)組、模 型結(jié)果等都可以規(guī)定print的輸出格式。 cat()函數(shù)也用來輸出,但它可以把多個參數(shù)連接 起來再輸出(具有paste()的功能)。例如: i =1; cat(i = , i, n) 注意使用cat()時要自己加上換行符“n”。它把各 項(xiàng)轉(zhuǎn)換成字符

21、串,中間隔以空格連接起來,然后 顯示。 如果要使用自定義的分隔符,可以用sep=參數(shù), 例如: cat(c(AB, C), c(E, F), n, sep=“,) 1AB,C,E,F cat(c(AB, C), c(E, F), sep=“-) 1 AB-C-E-F cat()還可以指定一個參數(shù)file=給一個文件名, 可以把結(jié)果寫到指定的文件中,如: cat(i = , 1, n, file=c:/work/result.txt) 如果指定的文件已經(jīng)存在則原來內(nèi)容被覆蓋。 加上一個append=TRUE參數(shù)可以不覆蓋原文件 而是在文件末尾附加,這很適用于運(yùn)行中的結(jié) 果記錄。 讀數(shù)據(jù)文件 讀入

22、純的文本文件用read.table()或scan() read.table(file, header=F, sep=, s, s, skip=0 ) 其中file是讀取的文件名;header表示第一行是 否作為變量名,默認(rèn)值是FALSE;sep是數(shù)據(jù)分 隔符,默認(rèn)是空格,可以根據(jù)實(shí)際的文檔定義 分隔符;s和s分別定義了行和 列的名字,可以缺??;skip表示跳過的行數(shù), 默認(rèn)是0;其他還有很多可設(shè)置的參數(shù),詳見 幫助文件 。 forbes is.data.frame(forbes); 1 TRUE forbes scan()函數(shù)的基

23、本用法 若是直接從命令行輸入數(shù)據(jù) x x 1 1 2 2 若一個純的文本文檔,已經(jīng)有一些數(shù)據(jù),如15 個學(xué)生的體重數(shù)據(jù)的文本文檔weight.txt 75.0 64.0 47.4 66.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0 69.0 56.9 50.0 72.0 w h_w h_w $height 1 172.4 169.3 169.3 171.4 166.5 171.4 168.2 165.1 168.8 167.8 165.8 167.8 13 164.4 169.9 164.9 $weight 1 75.0 54.8 64.0 64.8 47.4 62.2 66.9 52.0 62.2 65.0 62.2 65.0 58.7 57.5 15 63.5 讀取其他格式的文件 讀取SPSS數(shù)據(jù)文件 read.spss(file.sav, to.data.frame=TRUE) 讀取SAS數(shù)據(jù)文件 read.xport(file.xpt) # 讀入以后是個數(shù)據(jù)框 讀取excel數(shù)據(jù)文件 R里面沒有提供直接讀取excel數(shù)據(jù)文件的命令 ,Microsoft的文件背后究竟是個什么誰也不知 道。但可以調(diào)用RODBC

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論