在R語言當中有因子這個特殊的數據結構,和別的編程語言不一樣,這個數據結構的主要目的是用來分類,計算頻數和頻率,在後期將R語言用於統計學當中將會十分受用。而且在繪圖當中,咱們使用一樣的數據,將其轉化爲因子以後,在將這些數據放入繪製圖像的函數當中,圖像將會變得更加具備可讀性。咱們有兩種方式來建立因子這個數據結構,第一種是在數據框當中自動建立,另外一種方式是直接建立因子。編程
第一種方式是使用間接的方式來建立因子數據集,由於咱們數據框當中若是某一列的數據所有都是字符串,那麼R語言將會自動將這一列的數據默認爲因子。咱們來建立一個數據框看看:數據結構
> data<-data.frame(name=c("bob","mike","iris"),height=c(178,356,131),gender=c('f','m','f')) > data name height gender 1 bob 178 f 2 mike 356 m 3 iris 131 f
很顯然,咱們所建立的數據框,除了height,其餘兩列的數據都是字符串,所以R語言會將gender和name默認是因子,咱們能夠嘗試使用class來判斷數據的類型:編程語言
> class(data$gender) [1] "factor" > class(data$name) [1] "factor" > class(data$height) [1] "numeric"
咱們打印一下hieght:函數
> data$height
[1] 178 356 131
R語言很顯然給咱們輸出了height所對應數據的值,那麼對於因子數據會不會也是這樣呢?咱們來看看打印出gender的值是怎樣的:spa
> data$gender [1] f m f Levels: f m
能夠從上面看到在打印gender的時候,R語言還顯示出了level,這表示這個因子數據當中的數據有哪些類型,咱們只有兩種性別,所以只會輸出 f 和 m 。code
下面再來看看name的level如何:blog
> data$name [1] bob mike iris Levels: bob iris mike
這三個姓名是各不相同的,所以會打印出不一樣的三個姓名level。字符串
固然咱們也能夠直接使用level函數來查看因子當中的level,不是因子數據則會輸出null,以下所示:class
> levels(data$height) NULL > levels(data$gender) [1] "f" "m" > levels(data$name) [1] "bob" "iris" "mike"
nlevel函數用來查看因子數據level的長度:統計
> nlevels(data$name)
[1] 3
咱們建立一個有關性別的因子:
> sex=factor(c('f','m','f','f','m'),levels=c('f','m'),labels=c('female','male'),ordered=TRUE) > sex [1] female male female female male Levels: female < male
在上面的代碼當中,向量c表明了因子當中的數據集,levels表明了咱們人爲設定的level,固然即便不寫這個,factor函數也會自動幫咱們進行設定,可是這裏爲了和後面的labels相對應,所以必寫。labels表示咱們因子建立完畢後,每一個因子從新命名後的名字,由於以前在建立因子的時候爲了數據的簡便性就沒有將其英語單詞寫全,ordered表示因子的level按照順序排列,通常在R語言當中,首先在level當中出現的因子向量,這裏是「f」,其順序會優先於「m」。下面是不設定順序因子的狀況:
> sex<-factor(c('f','f','m','m'),labels=c("female","male")) > sex [1] female female male male Levels: female male
咱們利用is.ordered函數來查看因子是否具備順序:
> is.ordered(sex) [1] FALSE
很顯然這是沒有順序的,所以咱們能夠用ordered函數令他具備順序,若是使用了這個函數,那麼因子當中首先出現的level將小於後出現的level:
> ordered(sex) [1] female female male male Levels: female < male
這就是今天介紹的有關因子的所有知識了!但願你都可以掌握,並慢慢熟練起來!