




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第R語言因子類型的實現(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,還有一個levels(水平值)屬性,此屬性可以用levels()函數(shù)訪問,如
levels(sex)
返回:
因子的levels屬性可以看成是一個映射,把整數(shù)值1,2,...映射成這些水平值,因子在保存時會保存成整數(shù)值1,2,...等與水平值對應(yīng)的編號。這樣可以節(jié)省存儲空間,在建模計算的程序中也比較有利于進行數(shù)學(xué)運算。
事實上,read.csv()函數(shù)的默認(rèn)操作會把輸入文件的字符型列自動轉(zhuǎn)換成因子,這對于性別、職業(yè)、地名這樣的列是合適的,但是對于姓名、日期、詳細(xì)地址這樣的列則不合適。所以,在read.csv()調(diào)用中經(jīng)常加選項stringsAsFactors=FALSE選項禁止這樣的自動轉(zhuǎn)換,還可以用colClasses選項逐個指定每列的類型。
用as.numeric()可以把因子轉(zhuǎn)換為純粹的整數(shù)值,如
as.numeric(sex)
返回:
因為因子實際保存為整數(shù)值,所以對因子進行一些字符型操作可能導(dǎo)致錯誤。用as.character()可以把因子轉(zhuǎn)換成原來的字符型,如
as.character(sex)
返回:
為了對因子執(zhí)行字符型操作(如取子串),保險的做法是先用as.character()函數(shù)強制轉(zhuǎn)換為字符型。
factor()函數(shù)的一般形式為
factor(x,levels=sort(unique(x),na.last=TRUE),
labels,exclude=NA,ordered=FALSE)
可以用選項levels自行指定各水平值,不指定時由x的不同值來求得??梢杂眠x項labels指定各水平的標(biāo)簽,不指定時用各水平值的對應(yīng)字符串??梢杂胑xclude選項指定要轉(zhuǎn)換為缺失值(NA)的元素值集合。如果指定了levels,則當(dāng)自變量x的某個元素等于第j個水平值時輸出的因子對應(yīng)元素值取整數(shù)j,如果該元素值沒有出現(xiàn)在levels中則輸出的因子對應(yīng)元素值取NA。ordered取真值時表示因子水平是有次序的(按編碼次序)。
在使用factor()函數(shù)定義因子時,如果知道自變量元素的所有可能取值,應(yīng)盡可能使用levels=參數(shù)指定這些不同可能取值,這樣,即使某個取值沒有出現(xiàn),此變量代表的含義和頻數(shù)信息也是完整的。自己指定levels=的另一好處是可以按正確的次序顯示因子的分類統(tǒng)計值。
因為一個因子的levels屬性是該因子獨有的,所以合并兩個因子有可能造成錯誤,但在最新版本4.1.2沒有報錯,應(yīng)跟版本有關(guān),如
li1-factor(c('男','女'))
li2-factor(c('男','男'))
c(li1,li2)
返回:
如果結(jié)果不是因子的話,需要對其進行轉(zhuǎn)換。則那樣正確的做法是
factor(c(as.character(li1),as.character(li2)))
就是先轉(zhuǎn)換為字符型,再進行合并就可以了。
2.table()函數(shù)
用table()函數(shù)統(tǒng)計因子各水平的出現(xiàn)次數(shù)(稱為頻數(shù)或頻率)。也可以對一般的向量統(tǒng)計每個不同元素的出現(xiàn)次數(shù)。如
x-c("男","女","男","男","女")
sex-factor(x)
table(sex)
返回:
對一個變量用table函數(shù)計數(shù)的結(jié)果是一個特殊的有元素名的向量,元素名是自變量的不同取值,結(jié)果的元素值是對應(yīng)的頻數(shù)。單個因子或單個向量的頻數(shù)結(jié)果可以用向量的下標(biāo)訪問方法取出單個頻數(shù)或若干個頻數(shù)的子集。
3.tapply()函數(shù)
可以按照因子分組然后每組計算另一變量的概括統(tǒng)計。如
x-c("男","女","男","男","女")
sex-factor(x)
h-c(165,170,168,172,159)
tapply(h,sex,mean)
返回:
4.forcats包的因子函數(shù)
如果使用此函數(shù),需要先進行載入:
library(forcats)
在分類變量類數(shù)較多時,往往需要對因子水平另外排序、合并等,forcats包提供了一些針對因子的方便函數(shù)。
orcats::fac_reorder()可以根據(jù)不同因子水平分成的組中另一數(shù)值型變量的統(tǒng)計量值排序。如:
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
返回:
對上面數(shù)值畫條形圖:
barplot(res1)
返回:
如果希望按照統(tǒng)計量次序?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ù)較多時僅想將特定的一個或幾個水平次序放到因子水平最前面,可以用forcats::fct_relevel()函數(shù),如:
levels(fac)
返回:
fac3-fct_relevel(fac,"blue");levels(fac3)
返回:
fct_relevel()第一個參數(shù)是要修改次序的因子,后續(xù)可以有多個字符型參數(shù)表示要提前的水平。
forcats::fct_reorder2(f,x,y)也調(diào)整因子f的水平的次序,但是根據(jù)與每組中最大的x值相對應(yīng)的y值大小調(diào)整次序,這樣在作多個因子水平對應(yīng)的曲線圖時可以比較容易地區(qū)分多條曲線。
forcats::fct_recode()可以修改每個水平的名稱,如:
fac4-fct_recode(
"紅"="red","綠"="green","藍(lán)"="blue")
table(fac4)
返回:
fct_recode()在修改水平名時允許多個舊水平對應(yīng)到一個新水平,從而合并原來的水平。如果合并很多,可以用fct_collapse()函數(shù),記得要先導(dǎo)入forcats包的因子函數(shù),如
compf-fct_collapse(
comp,
"其它"=c("","無名","無應(yīng)答"),
"聯(lián)想"=c("聯(lián)想","聯(lián)想集團"),
"百度"=c("百度","百度集團"))
如果某個因子頻數(shù)少的水平很多,在統(tǒng)計時有過多水平不易展示主要的類別,可以用forcats::fct_lump(f)合并,缺省地從最少的類合并一直到其它類超過其它最小的類之前,可以用n=參數(shù)指定要保留多少個類。
練習(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)自動轉(zhuǎn)換為因
子。取出其中的sex和age
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衛(wèi)生學(xué)練習(xí)題庫(附答案)
- 客戶關(guān)系維護協(xié)議
- 浙江國企招聘2025浙江省農(nóng)發(fā)集團社會招聘76人筆試參考題庫附帶答案詳解
- 2025福建漳州臺商投資區(qū)資產(chǎn)運營集團有限公司招聘勞務(wù)派遣人員10人筆試參考題庫附帶答案詳解
- 2025年福建南平綠發(fā)集團有限公司招聘28人筆試參考題庫附帶答案詳解
- 2025內(nèi)蒙古恒正實業(yè)集團有限公司招聘10人筆試參考題庫附帶答案詳解
- 藝術(shù)民歌考試題及答案
- 高校科技創(chuàng)新路徑探索與實踐方案
- 叉車承包合同協(xié)議書范本
- 2024年電解電容器紙項目資金需求報告代可行性研究報告
- 2025公務(wù)員行政能力測試題及答案
- 2025年北京市順義區(qū)一模九年級道德與法治試題(含答案)
- 銀行業(yè)金融機構(gòu)高管任職資格考試多選題題庫及答案
- 2025年一級注冊建筑師《設(shè)計前期與場地設(shè)計》考試真題卷(附答案)
- CNAS-CC106:2023 CNAS-CC01在一體化管理體系審核中的應(yīng)用
- 全能型供電所崗位知識(知識)考試題庫(含答案)
- 華大新高考聯(lián)盟2025屆高三4月教學(xué)質(zhì)量測評化學(xué)+答案
- 2025年中國防曬護理洗發(fā)露市場調(diào)查研究報告
- 建筑材料租賃標(biāo)準(zhǔn)合同范本7篇
- 2025-2030中國太陽能照明系統(tǒng)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 國家電網(wǎng)招聘考試(金融類)專業(yè)考試歷年真題及答案
評論
0/150
提交評論