因素

因子是在 R 中表示分类变量的一种方法。给定一个向量 x,其值可以使用 as.character() 转换为字符,factor()as.factor() 的默认参数为向量的每个不同元素分配一个整数,以及一个级别属性和一个标签属性。级别是 x 可能采用的值,标签可以是给定元素,也可以由用户确定。

为了说明因子是如何工作的,我们将创建一个具有默认属性,自定义级别,自定义级别和标签的因子。

# standard
factor(c(1,1,2,2,3,3))
[1] 1 1 2 2 3 3
Levels: 1 2 3

当用户知道因子可以采用的可能值的数量大于向量中的当前值时,可以出现实例。为此我们自己在 factor() 中分配关卡。

factor(c(1,1,2,2,3,3),
         levels = c(1,2,3,4,5))
[1] 1 1 2 2 3 3
Levels: 1 2 3 4 5

出于样式目的,用户可能希望为每个级别分配标签。默认情况下,标签是级别的字符表示形式。在这里,我们为因子中的每个可能级别分配标签。

factor(c(1,1,2,2,3,3),
       levels = c(1,2,3,4,5),
       labels = c("Fox","Dog","Cow","Brick","Dolphin"))
[1] Fox Fox Dog Dog Cow Cow
Levels: Fox Dog Cow Brick Dolphin

通常情况下,只能使用 ==!= 比较因子,如果因子具有相同的水平。由于因子具有不同的因子水平,因此以下因素的比较失败,即使它们看起来相等。

factor(c(1,1,2,2,3,3),levels = c(1,2,3)) == factor(c(1,1,2,2,3,3),levels = c(1,2,3,4,5))
Error in Ops.factor(factor(c(1, 1, 2, 2, 3, 3), levels = c(1, 2, 3)),  : 
  level sets of factors are different

这是有道理的,因为 RHS 中的额外水平意味着 R 没有足够的关于每个因子的信息来以有意义的方式比较它们。

运算符 <<=>>= 仅适用于有序因子。这些可以表示仍然具有线性顺序的分类值。可以通过向 factor 函数提供 ordered = TRUE 参数或仅使用 ordered 函数来创建有序因子。

x <- factor(1:3, labels = c('low', 'medium', 'high'), ordered = TRUE)
print(x)
[1] low    medium high  
Levels: low < medium < high

y <- ordered(3:1, labels = c('low', 'medium', 'high'))
print(y)
[1] high   medium low   
Levels: low < medium < high

x < y
[1]  TRUE FALSE FALSE

有关更多信息,请参阅 Factor 文档