在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
這就是今天介紹的有關因子的全部知識了!希望你都能夠掌握,并慢慢熟練起來!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403.html
標籤:R
下一篇:R語言入門:處理缺失值和資料清洗