3

有人可以解释为什么 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
4

2 回答 2

9

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

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

那么 b 有 3 个级别。

降低额外等级的简单方法是:

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

或者如果您无法访问原始变量,

b<-factor(b)
于 2010-05-03T08:56:31.620 回答
0

您可以将多个因子水平分配给包含两个水平的因子:

 > 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
于 2010-05-03T19:50:21.097 回答