代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

提取因子级别时的意外行为

  •  3
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    有人能解释为什么levels()显示三个因子级别,而向量只有两个?

    > str(walk.df)
    'data.frame':   10 obs. of  4 variables:
     $ walker : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 2 2 2 2 2
    
    > walk.df$walker
     [1] 1 1 1 1 1 2 2 2 2 2
    Levels: 1 2 3
    

    我想提取一个水平向量,我认为这是正确的方法,但正如你所看到的,三次潜入其中会扰乱我的功能。

    > as.numeric(levels(walk.df$walker))
    [1] 1 2 3
    
    2 回复  |  直到 14 年前
        1
  •  9
  •   kohske    14 年前

    可能walk.df是因子变量的一个子集,有3个级别。 说,

    a<-factor(1:3)
    b<-a[1:2]
    

    那么b有3个层次。

    降低额外水平的一个简单方法是:

    b<-a[1:2, drop=T]
    

    或者如果不能访问原始变量,

    b<-factor(b)
    
        2
  •  0
  •   aL3xa    14 年前

    可以将多个要素级别指定给包含两个级别的要素:

     > set.seed(1234)
     > x <- round(runif(10, 1, 2))
     > x
      [1] 1 2 2 2 2 2 1 1 2 2
     > y <- factor(x)
     > levels(y)
     [1] "1" "2"
     > levels(y) <- c("1", "2", "3")
     > y
      [1] 1 2 2 2 2 2 1 1 2 2
     Levels: 1 2 3
    

    甚至根本没有级别:

     > p <- NA
     > q <- factor(p)
     > levels(q)
     character(0)
     > levels(q) <- c("1", "2", "3")
     > q
     [1] <NA>
     Levels: 1 2 3