
高效编程
|
65
通常,类别变量存成
1
、
2
、
3
、
4
、
5
的形式,并另附文档说明各数字的含义。
明显这很痛苦。当然,我们可将数据存成字符向量。尽管这样看起来很好,
但语法上是错误的,因为没有表达出这是一个类别变量。既然因子有正反两面,
那么总用或者永远不用因子都是不明智的。实际上,我们需要具体情况具体
分析。
通常来说,如果你的变量有固有排序(例如从大到少)或者你有固定不变的
类别集合,你该考虑使用因子。
内在排序
因子可用于图形排序。例如假设我们有一个数据集,其中 type变量有三个
可能取值:small、medium、large。显然,这是有序的。使用一个标准的
boxplot() 函数调用:
boxplot(y ~ type)
将创建箱线图(
boxplot
)
,
其中
x
轴是按照字符排序的。将变量 type 转换成因子,
我们很轻松地定义了正确的排序。
boxplot(y ~ factor(type, levels = c("Small", "Medium", "Large")))
多数用户使用 read.csv() 函数与因子打交道,该函数将字符列自动转
换成因子。如果数据混乱并且我们要清理重编数据,该函数的自动转
换功能是很讨厌的。通常在使用 read.csv() 读取数据时,我们将参数
stringsAsFactors
设置为 FALSE。尽管可将该参数添加到全局 options()
列表并放入
.Rprofile
文件中,但这容易导致不可移植代码,通常避免这样做。
固定类别
假如我们的数据集是月份相关的:
m =