最近正在学习R语言,碰到了因子factor,自己很不理解,网上找了很多的资料,可是感觉都说的很难,自己不是很理解,所以自己决定写一篇博客来帮助和自己一样有困惑的小伙伴。
因子factor
首先,因子是离散的,它不是连续的,它只是一个标签。举个例子:
> v=c(1,2,3,5)定义向量
> v打印
[1] 1 2 3 5
> class(v)查看类型
[1] "numeric"
> v= factor(v)调用函数,把变量转化为一个因子
> v打印
[1] 1 2 3 5
Levels: 1 2 3 5这是啥?先不管,我下面会说!
>
> class(v)
[1] "factor"查看类型,发现变为因子
> v+1由于上面转换后的因子看起来很像一个数,我们知道向量是可以做运算的,在这里我们试一试,结果报错了!!!!
[1] NA NA NA NA
Warning message:
In Ops.factor(v, 1) : ‘+’ not meaningful for factors
> v=c(1,2,3,5)
> v
[1] 1 2 3 5
> v+1在这里我们发现,原始的向量可以进行运算
[1] 2 3 4 6
>
factor看起来很像我们平时的数值,实则不然这个例子就很好的说明了这一点。
下面我们主要介绍一个关于因子的关键函数factor()及他的一些参数!
factor(x,levels,labels)
这里主要说三个参数
x,我们主要传入的是一个向量,就像上面的例子一样。
重点在于第二、三个参数,在这里,我只是使用我自己的理解来帮助大家,如有不对,请留言指正,感谢!
为了研究第二、三个参数我们做如下test:
> v=c(1,1,2,3,3)#定义有重复元素的向量!很重要,因为这样更直观
> v
[1] 1 1 2 3 3
> v=factor(v)
> v
[1] 1 1 2 3 3
Levels: 1 2 3
>
注意到,我们的元素是有重复的,细心的你,发现Levels: 1 2 3保存的是去重的元素,相当于python里面的集合,为什么会这样,或者说这样有什么好处,最大的好处就是节约存储空间,还有就是当数据很多且有很多重复的时候,你可以很直观的看到他真实的数据!
改变levels
> v=c(1,1,2,3,3)#定义有重复元素的向量!很重要,因为这样更直观
> v=factor(v,levels = c('a','b','c'))#手动改变levels,看效果!
> v
[1] a a b c c#发现原来的1,2, 3变成a,b,c了!
Levels: a b c
这里有一个疑问?我的v=c(1,1,2,3,3)有五个元素,levels = c('a','b','c')只有三个 元素,并不匹配,为什么不会报错
注意,我前面说了,factor的levels只是看不重复的的值,所以这些下该明白了吧。因为V里面不重复的就3个。
然后就会用我们实际需要的levels来一个一个替换,在实践中也是有这种需求的。
> v=c(1,1,2,3,3)
> v=factor(v,labels = c('a','b','c'))
> v
[1] a a b c c
Levels: a b c
labels也可以实现,类比levels即可。传入的依然是c()向量。
网友评论