跳至主要内容

R 中的因子(Factor)教程

了解 R 中的 factor 函数,并通过示例学习其结构、调整顺序层级、重命名层级,最后掌握对分类值进行有序排序。
· 5分钟 阅读

使用 AI 探索

banner

在 R 中,因子(factor)是一种用于表示分类变量的类型,它将数据存储为层级(levels)。该功能主要用于数据分析,尤其是统计分析。它还能帮助减少数据冗余,节省大量内存空间。

注意:分类变量是指根据标签或名称取值的变量。例如,人类的血型可以是 A、B、AB 或 O。

factor 函数

用途:对取值较少的数据进行分类。
参数:factor(v):v 可以是一个向量。

我们通过一个示例来看看因子的用法。

下面的代码包含两个分类变量,即 "Male" 和 "Female",也称为因子取值。

gender <- c("Male","Female","Female","Male","Female")

让我们为性别创建一个因子,使用 'factor(gender)',并将其保存到名为 'gender.factor' 的变量中。

gender.factor <- factor(gender)
gender.factor
  1. Male
  2. Female
  3. Female
  4. Male
  5. Female
Levels:
  1. 'Female'
  2. 'Male'

以上代码的输出如下:

Male Female Female Male Female
Levels:
'Female' 'Male'

如上所示,打印出的取值与输入向量相同。此外,"Levels"('Female' 和 'Male')按照字母顺序排序。

factor 函数的结构

我们使用下面代码中的 'str(gender.factor)' 来查看因子的结构。

str(gender.factor)
 Factor w/ 2 levels "Female","Male": 2 1 1 2 1 
Factor w/ 2 levels "Female","Male": 2 1 1 2 1

上述输出表明该因子有 2 个层级。factor 将字符向量 gender 转换为整数向量。"Female" 是第一个层级,编码为 1;"Male" 是第二个层级,编码为 2。

此外,从字符编码为数值的主要目的在于:类别本身会重复、存储冗余,可能占用大量内存;而使用因子可以降低这类存储负担,节省内存空间。

更改层级顺序

我们来更改层级顺序,使得 "Female" 的层级编码变为 2,"Male" 为 1。

通过将 "Male" 和 "Female" 作为向量传给 "levels" 参数,为性别创建一个新的因子。最终结果保存到名为 "gender.factor2" 的变量中。

gender.factor2 <- factor(gender,levels=c("Male","Female"))
gender.factor2
str(gender.factor2)
  1. Male
  2. Female
  3. Female
  4. Male
  5. Female
Levels:
  1. 'Male'
  2. 'Female'
 Factor w/ 2 levels "Male","Female": 1 2 2 1 2

打印 'gender.factor2' 以及使用 'str(gender.factor2)' 打印其结构,可以看到如下变化。

Male Female Female Male Female
 Levels:
'Male' 'Female'
 Factor w/ 2 levels "Male","Female": 1 2 2 1 2

以上输出表明 "Male" 的编码为 1,"Female" 的编码为 2。与之前的 'gender.factor' 相反。

重命名因子层级

我们通过常规方式使用 'levels' 作为第一个参数指定 "Male" 和 "Female",并使用 'labels' 作为第二个参数指定期望的新标签 "Gen_Male" 和 "Gen_Female",来更改输入向量取值的名称。

factor(gender,levels = c("Male","Female"),labels = c("Gen_Male","Gen_Female"))
  1. Gen_Male
  2. Gen_Female
  3. Gen_Female
  4. Gen_Male
  5. Gen_Female
Levels:
  1. 'Gen_Male'
  2. 'Gen_Female'
Gen_Male Gen_Female Gen_Female Gen_Male Gen_Female
 Levels:
'Gen_Male' 'Gen_Female'

以上输出显示,将 "Male" 的名称改为 "Gen_Male",将 "Female" 改为 "Gen_Female"。

为分类变量设定顺序

我们再看一个处理有序分类值的示例,此时顺序很重要。比如,裤子大小中,Large 记为 "L",加大号为 "XL",加加大为 "XXL",可以按升序排列。下面的代码收集了字符向量 "L"、"XL" 和 "XXL" 并存入 'pant'。变量 'pant.factor' 的参数指定了按升序排列的层级 'levels = c("L", "XL", "XXL")',并设置 'ordered = TRUE',从而能够按照需要进行比较排序。

pant <- c("XL","L","XL","XXL","L","XL")
pant.factor <- factor(pant,ordered = TRUE,levels = c("L","XL","XXL"))
pant.factor
pant.factor[1] > pant.factor[2]
  1. XL
  2. L
  3. XL
  4. XXL
  5. L
  6. XL
Levels:
  1. 'L'
  2. 'XL'
  3. 'XXL'

TRUE

XL L XL XXL L XL
 Levels:'L'< 'XL' < 'XXL'
TRUE

上面的输出首先显示使用 'pant.factor' 打印出的普通结果(XL, L, XL, XXL, L, XL)。层级 'L' < 'XL' < 'XXL' 以升序显示在控制台中。同时,'pant.factor[1] > pant.factor[2]' 用于比较 "XL" 是否大于 "L",结果为 TRUE。

恭喜

恭喜您,已经学习完本教程!

在本教程中,您学习了 R 中的 factor 函数及其示例、结构、层级顺序的调整、层级重命名,以及如何为分类值设定顺序。

如果您想进一步学习 R,请查看 DataCamp 的R 入门课程。

也可以阅读我们的教程:在 R 中使用函数。
 

主题