版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、實驗目的實驗目的實驗內(nèi)容實驗內(nèi)容學習學習S語言中語言中離散變量、混合數(shù)據(jù)的表示方法的表示方法1 1、數(shù)據(jù)表示方法、數(shù)據(jù)表示方法2 2、應用實例、應用實例3 3、實驗作業(yè)、實驗作業(yè)第四講第四講 因子、列表、數(shù)據(jù)框因子、列表、數(shù)據(jù)框因子(因子(factor)和有序因子)和有序因子 統(tǒng)計中的變量重要類別: 區(qū)間變量和名義變量、有序變量。 區(qū)間變量取連續(xù)的數(shù)值,可以進行求和、平均等運算。 名義變量和有序變量取離散值,既可用數(shù)值表示也可取字符型值,其具體數(shù)值沒有數(shù)量意義,不能用于加減乘除計算而只能用來分類或者計數(shù)。名義變量比如性別、省份、職業(yè),有序變量比如班級名次、質(zhì)量等級等。 因為離散變量有各種不同表
2、示方法,在S中為統(tǒng)一起見使用因子(factor)來表示這種分類變量。還提供了有序因子(ordered factor)來表示有序變量。 因子是一種特殊的字符型向量,其中每一個元素取一組離散值中的一個,而因子對象有一個特殊屬性levels表示這組離散值(用字符串表示)。例如: x y y 1 男 女 男 男 女 Levels: 男 女 函數(shù)factor()用來把一個向量編碼成為一個因子。一般形式為:factor(x, levels = sort(unique(x), na.last = TRUE), labels, exclude = NA, ordered = FALSE) 可以自行指定各離散取
3、值水平(levels),不指定時由x的不同值來求得。 labels可以用來指定各水平的標簽,不指定時用各離散取值的對應字符串。 exclude參數(shù)用來指定要轉(zhuǎn)換為缺失值(NA)的元素值集合。如果指定了levels,則因子的第i個元素當它等于水平中第j個時元素值取“j”,如果它的值沒有出現(xiàn)在levels中則對應因子元素值取NA。 ordered取真值時表示因子水平是有次序的(按編碼次序)。 可以用is.factor()檢驗對象是否因子,用as.factor()把一個向量轉(zhuǎn)換成一個因子。 x=c(1,0,1,1,0) y=factor(x,levels=sort(unique(x),decreas
4、ing=T),labels=c(男, 女),exclude=NA,order=F) y1 男 女 男 男 女 Levels: 男 女 x=c(1,0,1,1,0,2)y=factor(x,levels=c(1,0),labels=c(男, 女),exclude=NA,order=F) y1 男 女 男 男 女 Levels: 男 女 因子的基本統(tǒng)計是頻數(shù)統(tǒng)計,用函數(shù)table()來計數(shù)。 例如, sex = factor(c(男, 女, 男, 男, 女) res.tab res.tab 男 女 3 2 表示男性3人,女性2人。table()的結果是一個帶元素名的向 量,元素名為因子水平,元素值
5、為該水平出現(xiàn)的頻數(shù)。 S的結果除了可以顯示外,本身都是S對象(如這里的向量結果),可以很方便地進一步處理。 可以用兩個或多個因子進行交叉分類。比如,性別(sex)和職業(yè)(job)交叉分組可以用table(sex, job)來統(tǒng)計每一交叉類的頻數(shù),結果為一個矩陣,矩陣帶有行名和列名,分別為兩個因子的各水平名。 因子可以用來作為另外的同長度變量的分類變量。比如,假設上面的sex是5個學生的性別,而 h tapply(h, sex, mean) 可以求按性別分類的身高平均值。 這樣用一個等長的因子向量對一個數(shù)值向量分組的辦法叫做不規(guī)則數(shù)組(ragged array)。后面我們還可以看到更多的因子的應
6、用。列表(列表(list)定義)定義 列表是一種特別的對象集合,它的元素也由序號(下標)區(qū)分,但是各元素的類型可以是任意對象,不同元素不必是同一類型。元素本身允許是其它復雜數(shù)據(jù)類型,比如,列表的一個元素也允許是列表。 列表元素用“列表名下標”的格式引用。 但是,列表不同于向量,我們每次只能引用一個元素,如rec1:2的用法是不允許的。 注意:“列表名下標”或“列表名下標范圍”的用法也是合法的,但其意義與用兩重括號的記法完全不同,兩重記號取出列表的一個元素,結果與該元素類型相同,如果使用一重括號,則結果是列表的一個子列表(結果類型仍為列表)。 rec = list(name=李明, age=30
7、, 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:21 85 76 mode(rec1) mode(rec1) 在定義列表時如果指定了元素的名字(如rec中的name,age,scores),則引用列表元素還可以用它的名字作為下標,格式為“列表名元素名”,如: recage 1 30 另一種格式是“列表名$元素名”,如:
8、 rec$age 1 30 其中“元素名”可以簡寫到與其它元素名能夠區(qū)分的最短程度,比如“rec$s”可以代表 “rec$score”。 這種寫法方便了交互運行,編寫程序時一般不用簡寫,以免降低程序的可讀性。 使用元素名的引用方法可以讓我們不必記住某一個下標代表那一個元素,而直接用易記的元素名來引用元素。事實上,已知向量和矩陣都可以指定元素名、行名、列名。 定義列表使用list()函數(shù),每一個自變量變成列表的一個元素,自變量可以用“名字值”的方式給出,即給出列表元素名。 自變量的值被復制到列表元素中,自變量如果是變量并不會與該列表元素建立關系(改變該列表元素不會改變自變量的值)。(例見后)修改
9、列表 列表的元素可以修改,只要把元素引用賦值即可。 如: rec$age rec$age rec$sex rec6 rec rec$sex rec6 rec $name 1 李明 $age 1 30 $scores 1 85 76 90 $sex 1 男 5 NULL 6 1 161 sex rec1 rec1 rec11= 女 rec1 sex 第五號元素因為沒有定義所有其值是“NULL”,這是空對象的記號。 如果rec是一個向量,則其空元素為“NA”,這是缺失值的記號。從這里我們也可以體會“NULL”與“NA”的區(qū)別。 幾個列表可以用連接函數(shù)c()連接起來,結果仍為一個列表,其元素為各自變
10、量的列表元素。如: list.ABC ev=eigen(1:3)%o%(1:3) ev $values 1 1.400000e+01 9.176554e-16 -1.023391e-15 $vectors ,1 ,2 ,3 1, -0.2672612 0.6067775 0.7485937 2, -0.5345225 0.5530299 -0.6390960 3, -0.8017837 -0.5709457 0.1765328特征向量按矩陣存放,每一列為一個特征向量。二、奇異值分解及行列式二、奇異值分解及行列式svd()函數(shù)進行奇異值分解函數(shù)進行奇異值分解自學自學三、最小二乘擬合與三、最小二乘
11、擬合與QR分解分解 函數(shù)lsfit(x,y)返回最小二乘擬合的結果。最小二乘的模型為線性模型 lsfit(x,y)的第一個參數(shù)x為模型中的設計陣 ,第二個參數(shù)y為模型中的因變量y(可以是一個向量也可以是一個矩陣),返回一個列表,成員coefficients為上面模型的最小二乘系數(shù),成員residuals為擬合殘差,成員intercept用來指示是否有截距項,成員qr為設計陣 的QR分解,它本身又是一個列表。YX三、最小二乘擬合與三、最小二乘擬合與QR分解分解 關于最小二乘擬合還可參見ls.diag() 函數(shù)(查看幫助)。 函數(shù)qr(x)返回x的QR分解結果。矩陣X的QR分解為X=Q*R ,Q為
12、對角線元素都等于1的下三角陣,R為上三角陣。 函數(shù)結果為一個列表,成員qr 為一個矩陣,其上三角部分(包括對角線)分解的R,其下三角部分(不包括對角線)為分解的Q。其它成員為一些輔助信息。 x=rbind(c(1,2,3),c(4,5,6),c(7,8,9) y=qr(x) y qr.R(y) qr.Q(y) qr.Q(y)%*%qr.R(y) x=rbind(c(1,2,3),c(4,5,6),c(7,8,9) y=qr(x) y$qr ,1 ,2 ,31, -8.1240384 -9.6011363 -1.107823e+012, 0.4923660 0.9045340 1.809068e
13、+003, 0.8616404 0.9954736 -2.220446e-16$rank1 2$qraux1 1.123091e+00 1.095039e+00 2.220446e-16$pivot1 1 2 3attr(,class)1 qr qr.R(y) ,1 ,2 ,31, -8.124038 -9.601136 -1.107823e+012, 0.000000 0.904534 1.809068e+003, 0.000000 0.000000 -2.220446e-16 qr.Q(y) ,1 ,2 ,31, -0.1230915 0.9045340 0.40824832, -0.49
14、23660 0.3015113 -0.81649663, -0.8616404 -0.3015113 0.4082483 qr.Q(y)%*%qr.R(y) ,1 ,2 ,31, 1 2 32, 4 5 63, 7 8 9數(shù)據(jù)框(data.frame) 數(shù)據(jù)框是S中類似SAS數(shù)據(jù)集的一種數(shù)據(jù)結構。它通常是矩陣形式的數(shù)據(jù),但矩陣各列可以是不同類型的。數(shù)據(jù)框每列是一個變量,每行是一個樣品的觀測值。 數(shù)據(jù)框有更一般的定義。它是一種特殊的列表對象,有一個值為“data.frame”的class 屬性,各列表成員必須是向量(數(shù)值型、字符型、邏輯型)、因子、數(shù)值型矩陣、列表,或其它數(shù)據(jù)框。向量、因子成員為
15、數(shù)據(jù)框提供一個變量,如果向量非數(shù)值型則會被強制轉(zhuǎn)換為因子,而矩陣、列表、數(shù)據(jù)框這樣的成員為新數(shù)據(jù)框提供了和其列數(shù)、成員數(shù)、變量數(shù)相同個數(shù)的變量。作為數(shù)據(jù)框變量的向量、因子或矩陣必須具有相同的長度(行數(shù))。 盡管如此,我們一般還是可以把數(shù)據(jù)框看作是一種推廣了的矩陣,它可以用矩陣形式顯示,可以用對矩陣的下標引用方法來引用其元素或子集。數(shù)據(jù)框生成數(shù)據(jù)框生成 數(shù)據(jù)框可以用data.frame()函數(shù)生成,其用法與list()函數(shù)相同,各自變量變成數(shù)據(jù)框的成分,自變量可以命名,成為變量名。例如: d=data.frame(name=c(趙, 錢, 孫, 李, 王),age=c(20,21,22,21,2
16、0),height=c(170,171,175,165,181),gender=c(男, 女, 男, 女, 男 ) d 如果一個列表的各個成分滿足數(shù)據(jù)框成分的要求,它可以用as.data.frame()函數(shù)強制轉(zhuǎn)換為數(shù)據(jù)框。比如,上面的d如果先用list()函數(shù)定義成了一個列表,就可以強制成為一個數(shù)據(jù)框。 一個矩陣可以用data.frame()轉(zhuǎn)換為一個數(shù)據(jù)框,如果它原來有列名則其列名被作為數(shù)據(jù)框的變量名,否則系統(tǒng)自動為矩陣的各列起一個變量名(如X1,X2)。 d name age height gender 1 趙 20 170 男 2 錢 21 171 女 3 孫 22 175 男 4 李
17、 21 165 女 5 王 20 181 男 d1 name 1 趙 2 錢 3 孫 4 李 5 王 d1 1 趙 錢 孫 李 王 Levels: 李 錢 孫 王 趙 d22:3 1 21 22數(shù)據(jù)框引用 引用數(shù)據(jù)框元素的方法與引用矩陣元素的方法相同,可以使用下標或下標向量,也可以使用名字或名字向量。如d1:2, 2:3。數(shù)據(jù)框的各變量也可以用按列表引用(即用雙括號 或$符號引用)。 數(shù)據(jù)框的變量名由屬性names定義,此屬性一定是非空的。數(shù)據(jù)框的各行也可以定義名字,可以用rownames屬性定義。如: names(d) 1 name age height gender rownames(d)
18、 1 1 2 3 4 5 table(d4) 男 女 3 2 table(d4)男 女 3 2 tapply(d3,d4, mean) 男 女 175.3333 168.0000 tapply(d3,d4, mean) 錯誤在tapply(d3, d4, mean) : 變元的長度必需相同 d3/d2 1 8.500000 8.142857 7.954545 7.857143 9.050000attach()函數(shù) 數(shù)據(jù)框的主要用途是保存統(tǒng)計建模需要的數(shù)據(jù)。S的統(tǒng)計建模功能都需要以數(shù)據(jù)框為輸入數(shù)據(jù)。我們也可以把數(shù)據(jù)框當成一種矩陣來處理。 在使用數(shù)據(jù)框的變量時可以用“數(shù)據(jù)框名$變量名”的記法。但是
19、,這樣使用較麻煩,S提供了attach()函數(shù)可以把數(shù)據(jù)框“連接”入當前的名字空間。例如, attach(d) r d$r cat(i = , i, n) 注意使用cat()時要自己加上換行符“n”。它把各項轉(zhuǎn)換成字符串,中間隔以空格連接起來,然后顯示。 如果要使用自定義的分隔符,可以用sep=參數(shù),例如: cat(c(AB, C), c(E, F), n, sep=) ABCEF cat()還可以指定一個參數(shù)file=給一個文件名,可以把結果寫到指定的文件中,如: cat(i = , 1, n, file=c:/work/result.txt) 非常適用于中間或最后結果的存儲。 如果指定的文
20、件已經(jīng)存在則原來內(nèi)容被覆蓋。加上一個append=TRUE參數(shù)可以不覆蓋原文件而是在文件末尾附加,這很適用于運行中的結果記錄。 cat()函數(shù)和print()都不具有很強的自定義格式功能,為此可以使用cat()與format() 函數(shù)配合實現(xiàn)。format()函數(shù)為一個數(shù)值向量找到一種共同的顯示格式然后把向量轉(zhuǎn)換為字符型。例如: format(c(1, 100, 10000) 1 1 100 10000 S-PLUS中的format()函數(shù)功能較強,具有較多的控制參數(shù),請參見幫助。 R中目前format() 函數(shù)功能仍較弱,但R有一個formatC函數(shù)可以提供類似C語言的printf格式功能。
21、formatC對輸入向量的每一個元素單獨進行格式轉(zhuǎn)換而不生成統(tǒng)一格式,例如: formatC(c(1, 10000) 1 1 1e+004 在formatC()函數(shù)中可以用format=參數(shù)指定C格式類型,如“d”(整數(shù)),“f”(定點實數(shù)),“e”(科學記數(shù)法),“E”, “g”(選擇位數(shù)較少的輸出格式),“G”, “fg”(定點實數(shù)但用digits 指定有效位數(shù)),“s”(字符串)。 可以用width指定輸出寬度,用digits指定有效位數(shù)(格式為e,E,g,G,fg時)或小數(shù)點后位數(shù)(格式為f)時??梢杂胒lag參數(shù)指定一個輸出選項字符串,字符串中有-表示輸出左對齊,有0表示左空白用0填
22、充,有+表示要輸出正負號,等等。例如,我們有一個矩陣da中保存了三個日期的年、月、日: da ,1 ,2 ,3 1, 99 1 3 2, 96 11 93, 65 5 18 為了輸出這三個日期,可以用apply函數(shù)指定對每一行作用一個輸出函數(shù),此輸出函數(shù)利用cat()和formatC來控制: apply(da, 1, function(r) cat(formatC(r1, format=d, width=2, flag=0), -, formatC(r2, format=d, width=2, flag=0), -, formatC(r3, format=d, width=2, flag=0)
23、, n, sep=) 99-01-03 96-11-09 65-05-18 NULL 這里我們知道apply函數(shù)第一個參數(shù)指定了一個矩陣,第二個參數(shù)說明對行操作還是對列操作,第三個參數(shù)是一個函數(shù),這里我們使用了直接定義一個函數(shù)作為參數(shù)的辦法。輸出結果中多了一個NULL函數(shù),這是因為我們在交互運行,apply的結果作為一個表達式的值(NULL )會被顯示出來。 為避免顯示,可以把結果賦給一個臨時變量名,或者把整個表達式作為invisible() 函數(shù)的參數(shù),這時不顯示表達式值。 S的輸出缺省顯示在交互窗口。可以用sink()函數(shù)指定一個文件以把后續(xù)的輸出轉(zhuǎn)向到這個文件,并可用append參數(shù)指定
24、是否要在文件末尾附加: sink(“E:/work/result.txt, append=TRUE) ls() d sink() 調(diào)用無參數(shù)的sink()把輸出恢復到交互窗口。 Write(t(x),file=文件名,nol=nol(x)把一個矩陣X輸出到文件中,把X轉(zhuǎn)置后輸出因為R中矩陣是列優(yōu)先的,如果不轉(zhuǎn)置則輸出是按列輸出的。如果不指定列數(shù)則缺省使用5列。文件名缺省用data. Write.table(x,file=文件名)把數(shù)據(jù)框X輸出到文件中,輸出包括變量名表頭和行名。輸入輸入 為了從外部文件讀入一個數(shù)值型向量,S提供了scan()函數(shù)。如果指定了file參數(shù)(也是第一參數(shù)),則從指定
25、文件讀入,缺省情況下讀入一個數(shù)值向量,文件中各數(shù)據(jù)以空白分隔,讀到文件尾為止。例如: cat(1:12, n, file=E:/work/result.txt) x y x x V1 V2 V3 1 Zhou 15 3 2 Li Ming 9 李明 3 Zhang 10.2 Wang 讀入結果為數(shù)據(jù)框。 函數(shù)可以自動識別表列是數(shù)值型還是字符型,并在缺省情況下把字符型數(shù)據(jù)轉(zhuǎn)換為因子(加上as.is=T可以保留字符型不轉(zhuǎn)換)。 函數(shù)自動為數(shù)據(jù)框變量指定“V1 ”、“V2”這樣的變量名,指定“1”、“2”這樣的行名??梢杂胹參數(shù)指定一個字符型向量作為數(shù)據(jù)框的變量名,用
26、s參數(shù)指定一個字符型向量作為數(shù)據(jù)框的行名。 read.table()可以讀入帶有表頭的文件,只要加上header=TRUE參數(shù)即可。可以用sep 參數(shù)指定表行各項的分隔符。例如,為了讀入如下帶有表頭的逗號分隔文件E:d.csv: Name,score, cn Zhou,15,3 Li Ming, 9, 李明 Zhang, 10.2, Wang 使用如下語句: x=read.table(E:/d.csv, header=T, sep=,) x Name score cn 1 Zhou 15.0 3 2 Li Ming 9.0 李明 3 Zhang 10.2 Wang 其它一些用法見幫助。 cl
27、=read.table(E:/R/class.txt, as.is=c(1), s=c(Name, Sex, Age, Height, Weight); cat(names(cl),names(cl); class.data=read.table(E:/R/class.csv,header=T,sep=,); cat(names(class.data),names(class.data); Edata = read.table(E:/R/Employee data.csv,header=T,sep=,) cat(names(Edata),names(Edata); read.s
28、pss package:foreign R Documentation Read an SPSS data file Description: read.spss reads a file stored by the SPSS save and export commands and returns a list. Usage: read.spss(file, use.value.labels=TRUE, to.data.frame=FALSE, max.value.labels=Inf, s=FALSE) Arguments: file: character
29、variable with the name of the file to read. use.value.labels: Convert variables with value labels into R factors with those levels? to.data.frame: return a data frame? max.value.labels: Only variables with at most this many unique values will be converted to factors s: Trim trailing
30、spaces from factor levels? Details: This uses modified code from the PSPP project for reading the SPSS formats. Occasionally in SPSS value labels will be added to some values of a continuous variable (eg to distinguish different types of missing data), and you will not want these variables converted
31、 to factors. By setting max.val.labels you can specify that variables with a large number of distinct values are not converted to factors even if they have value labels. In addition, variables will not be converted to factors if there are non-missing values that have no value label. The value labels are then returned in the value.labels attribute of the variable. If SPSS variable labels are present, they are returned as the variable.labels attribute of the answer. Fixed length strings (including val
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程檢驗鑒定報告-文書模板
- 《保險公司主持技巧》課件
- 銀行合規(guī)管理制度推廣
- 酒店餐飲服務管理制度
- 直接引語和間接引語課件詳細
- 2024年中國鋰電池負極材料行業(yè)現(xiàn)狀及發(fā)展趨勢分析
- 力和機械復習課件
- 建筑專業(yè)社會實踐報告
- 建設工程招標代理合同GF
- 泰勒公式課件修正
- 金融理論與政策(華南農(nóng)業(yè)大學)-中國大學MOOC答案2023版
- 精讀《未來簡史》學習通超星期末考試答案章節(jié)答案2024年
- 2024年《論教育》全文課件
- 節(jié)能改造合同協(xié)議
- 國家開放大學專科《法理學》(第三版教材)形成性考核試題及答案
- 勞動教育概論智慧樹知到期末考試答案章節(jié)答案2024年哈爾濱工業(yè)大學
- (正式版)SHT 3158-2024 石油化工管殼式余熱鍋爐
- JJF(吉)69-2014 工業(yè)內(nèi)窺鏡校準規(guī)范
- 保稅倉庫建設方案保稅倉庫建設標準與平面規(guī)劃設計
- 防腐涂層專項施工方案(完整版)
- (完整版)生物必修一思維導圖
評論
0/150
提交評論