2012-12-04 3 views
2

가능한 중복 :
dropping factor levels in a subsetted data frame in R관측치가없는 요인 수준을 어떻게 떨어 뜨리나요?

은 내가 lme()를 사용하여 혼합 모델을 실행하고있어 여러 가지 변수와 데이터 프레임을 가지고있다. 변수 중 하나 인 ForAgeCat에는 5 개의 요인 수준 1,2,3,4,5가 있습니다.

str(mvthab.3hr.fc$ForAgeCat) 
>Factor w/ 5 levels "1","2","3","4",..: 5 5 5 5 5 5 5 5 5 5 ... 

문제는 내가 장난 생각 팩터 레벨 3에서 더 관찰이없는 (큰 데이터 집합의 부분 집합이다)이 데이터 세트에서, 즉, 존재하지 않는 실제로 요소 레벨 3 내 모델링은 lme()에서. 누군가가 요인 수준 목록에서 요인 수준 3을 제거/제거하도록 도와 줄 수 있습니까?

+0

'mvthab.3hr.fc $ ForAgeCat <- 인자 (mvthab.3hr.fc을 $ ForAgeCat)' –

답변

4

사용하는 기능과 같이 droplevels :

> DF$factor_var = droplevels(DF$factor_var) 

더 상세 :

> # create a sample dataframe: 
> col1 = runif(10) 
> col1 
    [1] 0.6971600 0.1649196 0.5451907 0.9660817 0.8207766 0.9527764 
     0.9643410 0.2179709 0.9302741 0.4195046 
> col2 = gl(n=2, k=5, labels=c("M", "F")) 
> col2 
    [1] M M M M M F F F F F 
    Levels: M F 
> DF = data.frame(Col1=col1, Col2=col2) 
> DF 
    Col1 Col2 
1 0.697 M 
2 0.165 M 
3 0.545 M 
4 0.966 M 
5 0.821 M 
6 0.953 F 
7 0.964 F 
8 0.218 F 
9 0.930 F 
10 0.420 F 

> # now filter DF so that only *one* factor value remains 
> DF1 = DF[DF$Col2=="M",] 
> DF1 
    Col1 Col2 
1 0.697 M 
2 0.165 M 
3 0.545 M 
4 0.966 M 
5 0.821 M 

> str(DF1) 
    'data.frame': 5 obs. of 2 variables: 
    $ Col1: num 0.697 0.165 0.545 0.966 0.821 
    $ Col2: Factor w/ 2 levels "M","F": 1 1 1 1 1 

> # but still 2 factor *levels*, even though only one value 

> DF1$Col2 = droplevels(DF1$Col2) 
> # now Col2 has only a single level: 
> str(DF1) 
    'data.frame': 5 obs. of 2 variables: 
    $ Col1: num 0.697 0.165 0.545 0.966 0.821 
    $ Col2: Factor w/ 1 level "M": 1 1 1 1 1 
+0

'droplevels'는 지금베이스'R'의 일부입니다. – Charlie

+0

아직 gdata에 있지만, 귀하의 의견에 비추어 내 답변을 수정하겠습니다. 감사합니다. – doug

관련 문제