5.1 Factor basics

假设我们想要创建一个记录月份的变量:

使用字符串来记录月份有两个问题:

  1. 理论上,月份只有 12 个取值。但使用字符串时,我们没有办法告诉 R 什么样的值才是合法的,即使输入错误,代码也不会有什么反应。
  1. 对月份的排序没有意义,因为字符串总是按照字母顺序排列的

我们可以使用因子来解决以上两个问题。想要创建一个因子,最好先创建指定因子水平顺序的一个向量:

现在可以开始创建因子了:

使用因子类型后,不在有效水平向量内的的所有值都会自动转换为 NA

如果要显示错误信息,可以用readr::parse_factor()函数代替 factor(),当 x 的中的某些元素不在有效水平列表时返回错误信息:

如果省略了定义水平向量这个步骤,那么R会按照字母顺序作为水平由低到高的顺序:

有时候我们会想让因子的水平顺序与创建时输入的顺序保持一致。在创建因子时,将levels设定为unique(x),就可以达到这个目的:

如果想要直接访问因子的有效水平向量或者个数,可以使用levels()nlevels()函数: