参考内容:教程一,
非数值型变量(类别变量和顺序变量)在R语言中称为因子,也称为因子型变量。因子型变量内的所有非重复值,被称为因子水平(levels)。
创建因子
在R语言中可以使用factor()函数和gl()函数来创建因子变量。
(1)使用factor()函数
factor()函数的语法格式为:
f <- factor(x=charactor(), levels, labels=levels, exclude = NA, ordered = is.ordered(x), namax = NA)
其中:
x :数据向量,也就是被转换成因子的向量;最简单的因子构成可以只输入x即可。如以下代码,输出结果中Levels里面去重显示了了A B C D Z,即为因子中的水平。
> f<- c('A','B','C','A','D','A','C','Z')
> fc1<- factor(f)
> fc1
[1] A B C A D A C Z
Levels: A B C D Z
levels:
可选向量,表示因子水平,并且指定了因子中水平的排序。当此参数缺省时,默认为x中包含的所有非重复值。
fc1未定义levels,因此因子中水平排序就按照字母顺序来,但是fc2定义了levels,因子中的顺序就据此调整。
fc3中,levels中因子不包含C,则输出fc3里面C所在的位置就是。
> fc2<- factor(f,levels=c('Z','B','A','D','C'))
> fc2
[1] A B C A D A C Z
Levels: Z B A D C
> fc3<- factor(f,levels=c('Z','B','A','D'))
> fc3
[1] A B <NA> A D A <NA> Z
Levels: Z B A D
labels:可选向量,用来给各水平单独命名(也可理解为加标签),缺省时默认取levels的值;fc4定义了labels后,输出结果就是各水平对应的标签。
fc4<- factor(f,levels=c('Z','B','A','D','C'),labels=c(26,2,1,4,3))
fc4
exclude:从x中剔除的水平值,默认为NA值。使用该命令时要注意对应调整labels的长度。
fc5中尝试剔除C,但是报错提示labels的向量长度不对,继而输出默认未定义exclude时候的结果。
fc6中将labels的数量调整为4,输出结果就将C用代替了。
> fc5<- factor(f,levels=c('Z','B','A','D','C'),labels=c(26,2,1,4,3),exclude=c('C'))
Error in factor(f, levels = c("Z", "B", "A", "D", "C"), labels = c(26, :
'labels'不对;长度5应该是一或4
> fc5
[1] A B C A D A C Z
Levels: Z B A D C
> fc6<- factor(f,levels=c('Z','B','A','D','C'),labels=c(26,2,1,3),exclude=c('C'))
> fc6
[1] 1 2 <NA> 1 3 1 <NA> 26
Levels: 26 2 1 3
ordered:逻辑值,因子水平是否有顺序(编码次序),若有取TRUE,默认取FALSE;
fc7未定义ordered,即默认为FALSE,出来的结果没有顺序。fc8定义了,故有顺序。
> fc7<- factor(f,levels=c('Z','B','A','D','C'),labels=c(26,2,1,4,3))
> fc7
[1] 1 2 3 1 4 1 3 26
Levels: 26 2 1 4 3
> fc8<- factor(f,levels=c('Z','B','A','D','C'),labels=c(26,2,1,4,3),ordered=TRUE)
> fc8
[1] 1 2 3 1 4 1 3 26
Levels: 26 < 2 < 1 < 4 < 3
nmax:水平个数的限制。对不起这个我不想研究了就这样吧我要睡觉。。。
总结:这个函数可。太。烦。了!