




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第R語言因子類型的實(shí)現(xiàn)目錄1.因子2.table()函數(shù)3.tapply()函數(shù)4.forcats包的因子函數(shù)
1.因子
R中用因子代表數(shù)據(jù)中分類變量,如性別、省份、職業(yè)。有序因子代表有序量度,如打分結(jié)果,疾病嚴(yán)重程度等。
用factor()函數(shù)把字符型向量轉(zhuǎn)換成因子,如
x-c("男","女","男","男","女")
sex-factor(x)
sex
返回:
attributes(sex)
返回:
因子有class屬性,取值為factor,還有一個(gè)levels(水平值)屬性,此屬性可以用levels()函數(shù)訪問,如
levels(sex)
返回:
因子的levels屬性可以看成是一個(gè)映射,把整數(shù)值1,2,...映射成這些水平值,因子在保存時(shí)會(huì)保存成整數(shù)值1,2,...等與水平值對(duì)應(yīng)的編號(hào)。這樣可以節(jié)省存儲(chǔ)空間,在建模計(jì)算的程序中也比較有利于進(jìn)行數(shù)學(xué)運(yùn)算。
事實(shí)上,read.csv()函數(shù)的默認(rèn)操作會(huì)把輸入文件的字符型列自動(dòng)轉(zhuǎn)換成因子,這對(duì)于性別、職業(yè)、地名這樣的列是合適的,但是對(duì)于姓名、日期、詳細(xì)地址這樣的列則不合適。所以,在read.csv()調(diào)用中經(jīng)常加選項(xiàng)stringsAsFactors=FALSE選項(xiàng)禁止這樣的自動(dòng)轉(zhuǎn)換,還可以用colClasses選項(xiàng)逐個(gè)指定每列的類型。
用as.numeric()可以把因子轉(zhuǎn)換為純粹的整數(shù)值,如
as.numeric(sex)
返回:
因?yàn)橐蜃訉?shí)際保存為整數(shù)值,所以對(duì)因子進(jìn)行一些字符型操作可能導(dǎo)致錯(cuò)誤。用as.character()可以把因子轉(zhuǎn)換成原來的字符型,如
as.character(sex)
返回:
為了對(duì)因子執(zhí)行字符型操作(如取子串),保險(xiǎn)的做法是先用as.character()函數(shù)強(qiáng)制轉(zhuǎn)換為字符型。
factor()函數(shù)的一般形式為
factor(x,levels=sort(unique(x),na.last=TRUE),
labels,exclude=NA,ordered=FALSE)
可以用選項(xiàng)levels自行指定各水平值,不指定時(shí)由x的不同值來求得??梢杂眠x項(xiàng)labels指定各水平的標(biāo)簽,不指定時(shí)用各水平值的對(duì)應(yīng)字符串。可以用exclude選項(xiàng)指定要轉(zhuǎn)換為缺失值(NA)的元素值集合。如果指定了levels,則當(dāng)自變量x的某個(gè)元素等于第j個(gè)水平值時(shí)輸出的因子對(duì)應(yīng)元素值取整數(shù)j,如果該元素值沒有出現(xiàn)在levels中則輸出的因子對(duì)應(yīng)元素值取NA。ordered取真值時(shí)表示因子水平是有次序的(按編碼次序)。
在使用factor()函數(shù)定義因子時(shí),如果知道自變量元素的所有可能取值,應(yīng)盡可能使用levels=參數(shù)指定這些不同可能取值,這樣,即使某個(gè)取值沒有出現(xiàn),此變量代表的含義和頻數(shù)信息也是完整的。自己指定levels=的另一好處是可以按正確的次序顯示因子的分類統(tǒng)計(jì)值。
因?yàn)橐粋€(gè)因子的levels屬性是該因子獨(dú)有的,所以合并兩個(gè)因子有可能造成錯(cuò)誤,但在最新版本4.1.2沒有報(bào)錯(cuò),應(yīng)跟版本有關(guān),如
li1-factor(c('男','女'))
li2-factor(c('男','男'))
c(li1,li2)
返回:
如果結(jié)果不是因子的話,需要對(duì)其進(jìn)行轉(zhuǎn)換。則那樣正確的做法是
factor(c(as.character(li1),as.character(li2)))
就是先轉(zhuǎn)換為字符型,再進(jìn)行合并就可以了。
2.table()函數(shù)
用table()函數(shù)統(tǒng)計(jì)因子各水平的出現(xiàn)次數(shù)(稱為頻數(shù)或頻率)。也可以對(duì)一般的向量統(tǒng)計(jì)每個(gè)不同元素的出現(xiàn)次數(shù)。如
x-c("男","女","男","男","女")
sex-factor(x)
table(sex)
返回:
對(duì)一個(gè)變量用table函數(shù)計(jì)數(shù)的結(jié)果是一個(gè)特殊的有元素名的向量,元素名是自變量的不同取值,結(jié)果的元素值是對(duì)應(yīng)的頻數(shù)。單個(gè)因子或單個(gè)向量的頻數(shù)結(jié)果可以用向量的下標(biāo)訪問方法取出單個(gè)頻數(shù)或若干個(gè)頻數(shù)的子集。
3.tapply()函數(shù)
可以按照因子分組然后每組計(jì)算另一變量的概括統(tǒng)計(jì)。如
x-c("男","女","男","男","女")
sex-factor(x)
h-c(165,170,168,172,159)
tapply(h,sex,mean)
返回:
4.forcats包的因子函數(shù)
如果使用此函數(shù),需要先進(jìn)行載入:
library(forcats)
在分類變量類數(shù)較多時(shí),往往需要對(duì)因子水平另外排序、合并等,forcats包提供了一些針對(duì)因子的方便函數(shù)。
orcats::fac_reorder()可以根據(jù)不同因子水平分成的組中另一數(shù)值型變量的統(tǒng)計(jì)量值排序。如:
set.seed(1)
fac-sample(c("red","green","blue"),30,replace=TRUE)
fac-factor(fac,levels=c("red","green","blue"))
x-round(100*(10+rt(30,2)))
res1-tapply(x,fac,sd);res1
返回:
對(duì)上面數(shù)值畫條形圖:
barplot(res1)
返回:
如果希望按照統(tǒng)計(jì)量次序?qū)σ蜃优判?,可以用forcats::fct_reorder()函數(shù),并畫圖條形圖,如
fac2-fct_reorder(fac,x,sd)
res2-tapply(x,fac2,sd)
barplot(res2)
返回:
新的因子fac2的因子水平次序已經(jīng)按照變量x的標(biāo)準(zhǔn)差從小到大排列。
有時(shí)在因子水平數(shù)較多時(shí)僅想將特定的一個(gè)或幾個(gè)水平次序放到因子水平最前面,可以用forcats::fct_relevel()函數(shù),如:
levels(fac)
返回:
fac3-fct_relevel(fac,"blue");levels(fac3)
返回:
fct_relevel()第一個(gè)參數(shù)是要修改次序的因子,后續(xù)可以有多個(gè)字符型參數(shù)表示要提前的水平。
forcats::fct_reorder2(f,x,y)也調(diào)整因子f的水平的次序,但是根據(jù)與每組中最大的x值相對(duì)應(yīng)的y值大小調(diào)整次序,這樣在作多個(gè)因子水平對(duì)應(yīng)的曲線圖時(shí)可以比較容易地區(qū)分多條曲線。
forcats::fct_recode()可以修改每個(gè)水平的名稱,如:
fac4-fct_recode(
"紅"="red","綠"="green","藍(lán)"="blue")
table(fac4)
返回:
fct_recode()在修改水平名時(shí)允許多個(gè)舊水平對(duì)應(yīng)到一個(gè)新水平,從而合并原來的水平。如果合并很多,可以用fct_collapse()函數(shù),記得要先導(dǎo)入forcats包的因子函數(shù),如
compf-fct_collapse(
comp,
"其它"=c("","無名","無應(yīng)答"),
"聯(lián)想"=c("聯(lián)想","聯(lián)想集團(tuán)"),
"百度"=c("百度","百度集團(tuán)"))
如果某個(gè)因子頻數(shù)少的水平很多,在統(tǒng)計(jì)時(shí)有過多水平不易展示主要的類別,可以用forcats::fct_lump(f)合并,缺省地從最少的類合并一直到其它類超過其它最小的類之前,可以用n=參數(shù)指定要保留多少個(gè)類。
練習(xí)
設(shè)文件class.csv中包含如下內(nèi)容:
name,sex,age,height,weight
Alice,F,13,56.5,84
Becka,F,13,65.3,98
Gail,F,14,64.3,90
Karen,F,12,56.3,77
Kathy,F,12,59.8,84.5
Mary,F,15,66.5,112
Sandy,F,11,51.3,50.5
Sharon,F,15,62.5,112.5
Tammy,F,14,62.8,102.5
Alfred,M,14,69,112.5
Duke,M,14,63.5,102.5
Guido,M,15,67,133
James,M,12,57.3,83
Jeffrey,M,13,62.5,84
John,M,12,59,99.5
Philip,M,16,72,150
Robert,M,12,64.8,128
Thomas,M,11,57.5,85
William,M,15,66.5,112
用如下程序把該文件讀入為R數(shù)據(jù)框d.class,其中的sex列已經(jīng)自動(dòng)轉(zhuǎn)換為因
子。取出其中的sex和age
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)內(nèi)部管理的數(shù)字化轉(zhuǎn)型實(shí)踐
- 醫(yī)療AI技術(shù)發(fā)展下的倫理挑戰(zhàn)與對(duì)策
- 醫(yī)療科技革新眾籌助力醫(yī)療設(shè)備研發(fā)
- 醫(yī)療信息化系統(tǒng)構(gòu)建智慧醫(yī)療生態(tài)圈
- 高血壓健康知識(shí)講座總結(jié)模版
- 土木工程生產(chǎn)實(shí)習(xí)5000字個(gè)人總結(jié)模版
- 供應(yīng)鏈金融的新紀(jì)元-區(qū)塊鏈技術(shù)發(fā)展研究
- 區(qū)塊鏈技術(shù)在供應(yīng)鏈物流中的應(yīng)用
- 電力公司女職工培訓(xùn)工作總結(jié)模版
- 全案設(shè)計(jì)代購合同范例
- 2025公務(wù)員行政能力測試題及答案
- 2025年北京市順義區(qū)一模九年級(jí)道德與法治試題(含答案)
- 銀行業(yè)金融機(jī)構(gòu)高管任職資格考試多選題題庫及答案
- 2025年一級(jí)注冊建筑師《設(shè)計(jì)前期與場地設(shè)計(jì)》考試真題卷(附答案)
- CNAS-CC106:2023 CNAS-CC01在一體化管理體系審核中的應(yīng)用
- 全能型供電所崗位知識(shí)(知識(shí))考試題庫(含答案)
- 華大新高考聯(lián)盟2025屆高三4月教學(xué)質(zhì)量測評(píng)化學(xué)+答案
- 2025年中國防曬護(hù)理洗發(fā)露市場調(diào)查研究報(bào)告
- 建筑材料租賃標(biāo)準(zhǔn)合同范本7篇
- 2025-2030中國太陽能照明系統(tǒng)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報(bào)告
- 國家電網(wǎng)招聘考試(金融類)專業(yè)考試歷年真題及答案
評(píng)論
0/150
提交評(píng)論