2014-02-19 3 views
0

데이터 세트 data에 66 개의 변수와 약 200,000 개의 관측치가 있습니다. 데이터 구조의 스냅 샷은 다음과 같습니다.많은 요인으로 범주 형 변수를 내림

$ f37: Factor w/ 10 levels "","1","10","2",..: 2 4 4 2 4 2 4 2 2 4 ... 
$ f38: Factor w/ 3509 levels "","100","1000",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ f39: Factor w/ 15 levels "","1","11","14",..: 7 4 2 4 7 8 15 7 4 4 ... 
$ f40: Factor w/ 15097 levels "","0","1","100",..: 11150 1 5539 1 6710 1650 14680 9235 1 1 ... 
$ f41: num 2156 2156 2156 2156 2156 ... 
$ f42: Factor w/ 14583 levels "","'0503624",..: 11573 1 13170 1 9243 8310 607 1979 1 1 ... 
$ f43: Factor w/ 133655 levels ""," ","(BLANK)",..: 92730 1 2046 1 26944 65286 198 42956 1 1 ... 
$ f44: Factor w/ 145029 levels "","-"," "," 1A8GHB1R76Y123913",..: 49912 1 14207 1 9798 121241 31872 88345 1 1 ... 
$ f45: Factor w/ 124642 levels "","'11291331764964",..: 118266 1 108600 1 14814 3176 46466 99158 1 1 ... 
$ f46: Factor w/ 6524 levels ""," "," HOL 232",..: 85 1 1 1 207 1 1 1 `  

데이터에 많은 수의 범주 형 변수가 있습니다. 숫자보다 큰 레벨을 가진 범주 형 변수를 제외하고 싶습니다. n, 말하십시오. 이것은 계산 시간을 줄이는 것뿐만 아니라 임의의 포리스트와 같은 특정 기계 학습 알고리즘이 작동하도록하는 것입니다. 내가하려고 할 때, 그러나

drop_factors <- function(x){ 
for (j in 1:length(x[1,])) { 

     if (is.factor(x[,j])) { 
       if(nlevels(x[,j])>32){ 
        x[,j]<-NULL 
      } 
     } 

    } 
} 

:

다음과 같은 오류
dropfactors(data) 

내가 얻을 : 내가 어떤 도움을

Error in `[.data.frame`(x, , j) : undefined columns selected 

을 주셔서 감사합니다 정말 것이다

나는 다음과 같은 코드를 시도 ?

답변

0

당신은 루프에 대한 필요가 없습니다

data[sapply(data, nlevels) <= 32] 

당신은 오류가 발생하면 for 루프 동안 데이터 프레임의 열 수를 변경할 수 있기 때문이다. 따라서 j은 나머지 열 수보다 큰 값을 가질 수 있습니다.

0

당신은 다음과 같이 수행에 대한 32 개 이상의 레벨 요인을 식별 할 수

factor32 <- sapply(data, function(x) class(x) == "factor" & nlevels(x) > 32) 
data <- data[, !factor32] 

V

+0

큰, 즉 작품! 고맙습니다! – user3328027

관련 문제