R語言入門:因子的使用


在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的值是怎樣的:

> data$gender
[1] f m f
Levels: f m

可以從上面看到在打印gender的時候,R語言還顯示出了level,這表示這個因子數據當中的數據有哪些類型,我們只有兩種性別,因此只會輸出 f 和 m 。

下面再來看看name的level如何:

> data$name
[1] bob  mike iris
Levels: bob iris mike

這三個姓名是各不相同的,因此會打印出不同的三個姓名level。

當然我們也可以直接使用level函數來查看因子當中的level,不是因子數據則會輸出null,如下所示:

> levels(data$height)
NULL
> levels(data$gender)
[1] "f" "m"
> levels(data$name)
[1] "bob"  "iris" "mike"

nlevel函數用來查看因子數據level的長度:

> nlevels(data$name)
[1] 3

二.利用factor函數直接創建因子

我們創建一個有關性別的因子:

> 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

這就是今天介紹的有關因子的全部知識了!希望你都能夠掌握,並慢慢熟練起來!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM