R因素

示例

因子是表示R中类别变量的一种方法。给定一个向量x,可以使用将该向量的值转换为字符,的默认参数为向量的每个不同元素以及level属性和label属性的默认参数,并为其分配一个整数。级别是可能采取的值,标签可以是给定元素或由用户确定。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没有关于每个因子的足够信息,无法以有意义的方式进行比较。

运营商<,<=,>和>=仅用于有序因素可用。这些可以表示仍具有线性顺序的分类值。可以通过向函数提供ordered = TRUE参数factor或仅使用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

有关更多信息,请参见因子文档。