因子 Factor

因子(factor)是一个对同长的其他向量元素 进行分类(分组)的向量对象。 R 同时提供有序(ordered)和无序(unordered)因子。 而“真正”使用因子是在设计模型公式的时候。

因子(factor)用来存储分类数据,因子向量只能存储事先定义的值; A factor is a vector that can contain only predefined values, and is used to store categorical data. (adv-r) 不能添加一个“非法”的水平,可以提前插入新的水平

因子的值本质上是一种分类,而非数字。

因子的水平(level):因子向量中不同值的记录

因子的长度:length(factorName):为数据的长度,而非水平的个数

对因子的操作

定义因子

# 定义一个因子  
x.f <- factor(c('A', 'B', 'A', 'A', 'B', 'A'))  

x.f  
##  [1] A B A A B A  
##  Levels: A B  

class(x.f)  
## [1] "factor"  

levels(x.f)  
## [1] "A" "B"  

length(x.f)  
## [1] 6

插入新的水平

# 不能使用未定义的(非法)水平  
x.f[3] <- 'C'  
##  Warning message:  
##    In `[<-.factor`(`*tmp*`, 3, value = "C") :  
##    invalid factor level, NA generated  

# 可以提前插入新的水平  
x<- c('A', 'B', 'A', 'A', 'B', 'A')  
x.f <- factor(x, levels = c("A", "B", "C"))  
x.f  
##  [1] A B A A B A  
##  Levels: A B C

因子类型转换为其他类型

数字型因子向量转换为数值向量,需要先使用as.character转换为字符型;

x.f <- factor(c(20:25))  
as.integer(x.f)  
##  [1] 1 2 3 4 5 6  
as.integer(as.character(x.f))  
##  [1] 20 21 22 23 24 25

因子组合

组合因子时需要注意:

# 定义两个因子向量  
x.f1 <- factor(c('A', 'B', 'A'))  
x.f2 <- factor(1:3)  

unclass(x.f1)  
##  [1] 1 2 1  
##  attr(,"levels")  
##  [1] "A" "B"  
unclass(x.f2)  
##  [1] 1 2 3  
##  attr(,"levels")  
##  [1] "1" "2" "3"  

c(x.f1, x.f2)  
##  [1] 1 2 1 1 2 3  

c(as.character(x.f1), as.character(x.f2))  
##  [1] "A" "B" "A" "1" "2" "3"

读入数据时对因子的处理

在读入数据时,R中大部分loading Function会自动将字符型向量转换为因子向量,为避免这种情况,可以在函数参数中设置

stringsAsFactors = FALSE

也可以使用

options(stringsAsFactors = FALSE)

全局设置,但并不建议这样使用。

Changing a global option may have unexpected consequences when combined with other code (either from packages, or code that you’re source()ing)

注意事项

只有部分适用于字符型向量的函数,可以应用在因子向量上(gsub,grepl),另一些则会抛出错误(nchar)。 建议在类似场景下,将因子向量转换为字符型向量进行处理

results matching ""

    No results matching ""