作者:宋星云 中国科学院心理研究所硕士,R语言爱好者。已有多年数据分析与R语言的实战经验,毕业后将从事数据分析工作。
个人公众号:星云实验室
类别变量(nominal variable),又称名义变量、称名变量、分类变量,是一种常用的定性变量,用于表示类别。本身没有等级顺序之分,不可比较大小,不可加减乘除。例如性别、民族、肤色、学号等等。
在R中,通常使用factor类型的变量存储类别变量,有时即便你直接使用了string类型,但是在数据分析中,R依旧会将string变量转化为factor变量进行分析。通常,我们可以直接用factor函数进行变量类型的转化:
item <- factor(item)
但是,factor类型的变量默认是按照字符串的顺序排列的,在数据可视化、回归分析中,排列顺序均会有一定的影响。有时会很麻烦。
举个例子:下表是一次考试中4题的平均分(数据为自编)
现在我们要绘制4题的柱状图,如果直接绘制,那么会是这样的情况:
在横轴上,item会按照字符串顺序排列,而不是按照我们给出的T1,T2,T3,T11的顺序排列。
那么该怎么办呢?
levels函数能够显示factor变量的顺序,labels函数则显示我们看到的那部分内容。我们直接对factor变量的label属性进行设置,就可以达到自定义顺序的效果:
item<-c("T1","T2","T3","T11")
factor(item)
# > [1] T1 T2 T3 T11
# > Levels: T1 T11 T2 T3
### 可以使用此方案为factor后的变量加自定义的顺序
ordered.item <- factor(1:length(item), labels = item)
ordered.item
# > [1] T1 T2 T3 T11
# > Levels: T1 T2 T3 T11
有时,在数据框(data.frame)内,排列的顺序也比较复杂,例如下表,我们依旧想要按照 T1 T2 T3 T11 的顺序来画图,此时不能直接按照上述方法操作。
解决方案依旧不复杂:
### 首先写入自定义顺序
ordered.item <- c("T1","T2","T3","T11")
ordered.item <- factor(1:length(ordered.item),labels = ordered.item)
### 然后对数据框df中的item字段进行自定义顺序排列
df$item<-factor(df$item,levels = levels(ordered.item))
levels(df$item)
# > [1] T1 T2 T3 T11
这样,在后续的分析中,df的item字段就会是按照 T1 T2 T3 T11 的顺序来排列了。

公众号后台回复关键字即可学习
回复 爬虫 爬虫三大案例实战
回复 Python 1小时破冰入门回复 数据挖掘 R语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
回复 常用算法 常用数据挖掘算法
