我确信, 这个主题比我写得更好的博客或者书<=3. 点进来就赚到, 但是不要点赞.
A factor is a vector that can contain only predefined values
是vector, 但有限制, 只能是contain only predefined values
是在integer vector基础上的, 但有新的属性: class是"factor". (class有什么作用, 另一篇博客说了). 以及levels. 那么is.vector
一定是false了. 注意, labels并不是属性的一部分.
但如果不听文档的, 一定要改怎么办?
> f<-factor(c(1,2,3))
> f[4]<-"2" # 没问题
> f[5]<-2 # 也可以
> f[6]<-4 # NA
Warning message:
In `[<-.factor`(`*tmp*`, 6, value = 4) : invalid factor level, NA generated
is.vector返回false. as.vector把它转为字符串向量.
> f=factor(c(1,3,2))
> as.vector(f)
[1] "1" "3" "2"
> class(as.vector(f))
[1] "character
从typeof和mode来看
> f<-factor(c("1","2","3"))
> mode(f)
[1] "numeric"
> typeof(f)
[1] "integer"
虽然里面写的是字符串, 的确是integer
is.numeric与as.numeric
文档说了, is.numeric必然返回false.
as.numeric返回它underlying的integer representation.
比如:
> f<-factor(c("4","5","5"))
> as.numeric(f)
[1] 1 2 2
那要怎么得到c(4,5,5)
?
> as.numeric(as.character(f))
[1] 4 5 5
上面这个方法很容易理解, 但更快的是这种:
as.numeric(levels(f))[f]
combine会怎样?
# NB: you can't combine factors
c(factor("a"), factor("b"))
#> [1] 1 1
其实是integer合在一起.