R語言中的因子類型詳解

一、Factor函數

#函數factor可以把一個向量編碼為一個因子,其一般形式為:
#factor(x,levels=sort(unique(x),na.last=TRUE),labels,exculde=NA,order=FALSE)
#其中x是向量,levels是水平,可以自行指定各離散的取值,不指定時由x的不同值來表示,labels可以用來指定各水平的標簽
#不指定時用各離散取值的對應字符串
 
sex<-c("M","F","M","M","F")
factor(sex)
#使用is.factor來判斷對象是否為因子類型
is.factor(sex)
#使用as.factor來將對象轉換為因子類型
sex.factor<-as.factor(sex)
#使用levels來取得因子中的水平
levels(sex.factor)
# [1] "F" "M"

二、tapply函數

#函數tapply()
#當我們知道5個人的性別以及5個人的身高的時候,就能計算出每個性別下的平均身高
height<-c(170,175,180,165,168)
 
tapply(height,sex.factor,mean)
# F        M 
# 171.5000 171.6667 
 
#tapply 的使用格式為tapply(x,index,fun) 其中x為對象,index為與x具有相同個數的因子類型,fun為指定的方法

三、gl()函數

#gl()函數
#gl函數能很快的產生因子,其基本用法為:gl(n,k,length=n*k,labels=1:n,order=false)
 
gl(3,5)
# [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
# Levels: 1 2 3
 
gl(3,1,15)
# [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
# Levels: 1 2 3

補充:R語言中因子(factor)轉換成數值型(numeric)的問題

一直覺得隻要是數字,不管是什麼類型的,都可以通過as.numeric()函數轉換為對應的numeric類型的數字,例如

x<-“123”,x為character類型,而as.numeric(x)則為numeric類型的123。但是因子(factor)類型卻不一樣。

a<-factor(c(100,200,300,301,302,400,10)),它們的值分別為100 200 300 301 302 400 10,然而as.numeric(a)對應的值並非100 200 300 301 302 400 10,而是2 3 4 5 6 7 1。因子(factor)轉換成數值型(numeric)的規則是這樣的:

一共有n個數,那麼轉換後的數字就會在1——n中取值,數字最小的取一,次小的取二,以此類推。

那麼如何讓因子(factor)類型裡的數值轉換對應的數值型呢?

as.numeric(as.character(factorname))
as.numeric(levels(factorname)[factorname])

以上代碼都可以實現將因子(factor)類型裡的數值轉換對應的數值型,思路都是先轉換成字符型然後再轉換成數值型。

推薦閱讀:

    None Found