zoukankan      html  css  js  c++  java
  • R中的factor是什么

    我确信, 这个主题比我写得更好的博客或者书<=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合在一起.

  • 相关阅读:
    Java I/O流
    Java 网络编程
    Java 位运算
    Java高级特性 实用类
    Java高级特性 集合
    Log4j
    DML和DQL以及常用函数
    mysql 初始语句
    jQuery中表单的初始验证
    使用jQuery对DOM中的节点操作
  • 原文地址:https://www.cnblogs.com/Tokubara/p/13810617.html
Copyright © 2011-2022 走看看