2010-05-03 1 views
3

레벨()이 세 가지 요인 수준을 표시하는 이유를 설명 할 수 있습니까? 벡터에 두 가지만 있다고 볼 수 있습니까?요인 수준을 추출 할 때 예기치 않은 동작

> 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 
+0

'... 세 변수를 보여줍니다'아마도'values' 또는'levels'을 의미할까요? – aL3xa

+0

네 말이 맞아, 나는 수준을 의미했다. –

+1

돌이켜 볼 때, 부분 집합 객체에'droplevels()'를 사용할 수 있으며,이 문제를 완전히 피할 수 있습니다. –

답변

9

아마도 walk.df는 3 수준의 요인 변수의 하위 집합입니다. say,

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

다음 b는 3 단계입니다.

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

또는 원래 변수에 액세스 할 수없는 경우,

b<-factor(b) 
+0

당신은 정확합니다, 그것은 부분 집합입니다. 나는 그 물체를 너무 세게 닦아서 원시 물체로부터 샘플링한다는 사실을 잊어 버렸습니다. 그것은 3 단계로되어 있습니다. –

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 

또는 어떤 수준 없습니다 모든 :

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

내가 정말로 원했던 부분은 하위 집합에 나타나는 수준을 추출하는 것이 었습니다. 나는 이것을 list.of.walkers <- sort (unique (walk.df $ label))로 해결했다. –