因子在R語(yǔ)言中可以用來(lái)表示名義型變量或有序變量。
在統(tǒng)計(jì)學(xué)中,變量可以分為:區(qū)間變量,名義變量和有序變量。
區(qū)間變量即可以取連續(xù)值的變量,如體重,身高,溫度等等。
名義變量一般表示類別,如性別,種族等等。
有序變量是有一定排序順序的變量,如職稱,年級(jí)等等。
在R語(yǔ)言中,名義變量和有序變量可以使用因子來(lái)表示。
1、因子的創(chuàng)建
在R語(yǔ)言中可以使用factor()函數(shù)和gl()函數(shù)來(lái)創(chuàng)建因子變量。
(1)使用factor()函數(shù)
函數(shù)factor()以一個(gè)整數(shù)向量的形式存儲(chǔ)類別值,整數(shù)的取值范圍是[1... k ](其中k 是名義型變量中唯一值的個(gè)數(shù)),同時(shí)一個(gè)由字符串(原始值)組成的內(nèi)部向量將映射到這些整數(shù)上。
其語(yǔ)法格式為:
f<-factor(x=charactor(),levels,labels=levels,exclude = NA, ordered = is.ordered(x),namax = NA)
其中:
x 為創(chuàng)建因子的數(shù)據(jù),是一個(gè)向量;levels:因子數(shù)據(jù)的水平,默認(rèn)是x中不重復(fù)的值;labels:標(biāo)識(shí)某水平的名稱,與水平一一對(duì)應(yīng),以方便識(shí)別,默認(rèn)取levels的值;exclude:從x中剔除的水平值,默認(rèn)為NA值;ordered:邏輯值,因子水平是否有順序(編碼次序),若有取TRUE,否則取FALSE;nmax:水平個(gè)數(shù)的限制。
fc1<-factor(c(1,2,3,3,1,2,2,3,1,3,2,1))
fc2<-factor(rep(1:3,times=2),labels=c("A","B","C"))
grade<-c("Freshman","Sophomore","Junior","Senior")
fc3<-factor(grade,ordered=TRUE) #對(duì)于字符型向量,因子的水平默認(rèn)依字母順序創(chuàng)建
fc4<-factor(grade,ordered=TRUE, levels=c("Freshman","Sophomore","Junior","Senior")) #指定levels,則按levels中的順序定義數(shù)值
本部分執(zhí)行情況如下圖所示:

(2)使用gl()函數(shù)
gl()函數(shù)用于定義有規(guī)律的因子向量,其語(yǔ)法格式如下:
gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)
其中參數(shù)的含義如下:
n: 正整數(shù),表示因子的水平個(gè)數(shù)
k:正整數(shù),表示每個(gè)水平重復(fù)的次數(shù);
length: 正整數(shù),表示因子向量的長(zhǎng)度,默認(rèn)為n*k
labels: 表示因子水平的名稱,默認(rèn)值為1:n
ordered: 邏輯變量,表示因子水平是否是有次序的,默認(rèn)值為FALSE
g1 <- gl(3,3) # 1 1 1 2 2 2 3 3 3
g2 <- gl(3,3,5) # 1 1 1 2 2
g3 <- gl(3,2, labels = c('A', 'B', 'C')) # A A B B C C
2、因子的索引
fc1[1] #訪問(wèn)輸出第一個(gè)水平
fc1[1:3] #訪問(wèn)輸出1~3個(gè)水平
fc1[c(1,4,7)] #訪問(wèn)輸出第1,4,7個(gè)水平值
fc1[-1] #排除第一個(gè)
fc1[-c(1:4)] #排除第1~4ge
fc1[fc1!=1] #過(guò)濾掉等于1的因子水平
fc3[fc3>'Junior'] #對(duì)于有序因子可以使用>,>=,<,<=,!=,==;而非有序因子,只可以使用!=和==
注意:因?yàn)橐蜃右话惚硎久x變量或有序變量,如非有序因子,則使用>,>=,<,<=比較大小是沒(méi)有意義的。
本部分執(zhí)行情況如下圖所示:

3、因子的修改
fc1[1] <- 3 #注意,修改的值必須在原有的水平中
fc1[1:3] <- 2 #將1~3個(gè)水平值改為2
fc1[-1] <- 3 #將除第1個(gè)水平之外的其它水平值修改為3
fc1[-c(1,4,7)] <-1 #將除第1,4,7個(gè)水平之外的值修改為1
新聞熱點(diǎn)
疑難解答