因素
因子是在 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 文档 。