неожиданное поведение при извлечении уровней факторов - PullRequest
3 голосов
/ 03 мая 2010

Может кто-нибудь объяснить, почему level () показывает три факторных уровня, а вы можете видеть, что вектор имеет только два?

> 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 ]

9 голосов
/ 03 мая 2010

, вероятно, walk.df - это подмножество факторной переменной с 3 уровнями. говорят,

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

, тогда b имеет 3 уровня.

Простой способ сбросить дополнительный уровень:

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

или если вы не можете получить доступ к исходной переменной,

b<-factor(b)
0 голосов
/ 03 мая 2010

Вы можете назначить несколько уровней фактора для фактора, который содержит два уровня:

 > 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
...