因子在 R 中用于处理分类变量。分类变量类似于 C/C++ 中的枚举类型,是在固定的已知集合中取值的变量。在 tidyverse
包中,用于处理因子的是 forcats
包。由于因子的类似枚举特性,因此也被称为分类变量。
创建因子
可以使用 factor()
函数创建因子,其基本形式为 factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)
。levels
参数也被称为水平,当使用该函数对指定字符向量 x
构建因子却不指定水平时,该函数会将字符向量中的非重复元素构成的集合作为水平,并以 ordered
参数进行排序。当指定了水平时,字符向量 x
中不在水平集合内的所有值都会自动转换为 NA 。此外,还有着以下几个函数用来达成某些常见操作:
x %>% factor(levels = unique(x))
可以生成与 x 顺序相同的因子x %>% factor() %>% fct_inorder()
也可以生成与 x 顺序相同的因子x %>% parse_factor(levels)
可以显示因子生成过程中的错误信息
因子水平计数
可以使用 count()
函数给因子水平计数,第一参数为数据表,第二参数为数据表中类型为因子的列。
因子水平修改
可以使用 fct_recode()
函数对已有的水平进行更改:
fct_recode()
1 | > x <- factor(c("apple", "bear", "banana", "dear")) |
使用该函数修改不存在的水平会给出相应的警告信息。
此外,还可以使用该函数的变体 fct_collapse()
函数来进行手动因子水平分组:
fct_collapse()
1 | > fct_count(gss_cat$partyid) |