2012-06-21 5 views
0

R에서 일부 데이터 조작을 시도하고 있습니다. 데이터 프레임이 2 개 있고, 하나는 학습 데이터이고, 다른 하나는 모든 데이터가 범주 형이며 요인 변수로 저장되어 있습니다.R 요인 값이 변경됨

데이터에 일부 NA가 있으며 "-1"로 변환하려고합니다. 교육 자료로 활용하면 문제가 없지만 테스트 데이터에는 적합하지 않습니다.

루프가 실행되는 동안 뭔가가 변경되지만 어떤 것이 있는지 파악할 수 없습니다. 여기

은 년대 이전 : 여기
> class(catTrain1[,"Cat_111"]) 
[1] "factor" 
> class(catTest1[,"Cat_111"]) 
[1] "factor" 

> table(catTrain1[,"Cat_111"]) 

    1 2 
726 25 
> table(catTest1[,"Cat_111"]) 

    0 1 2 
    1 503 15 

루프입니다 :

여기
> for(i in 1:ncol(catTrain1)){ 
+ catTrain1[,i] <- as.factor(as.character(ifelse(is.na(catTrain1[,i]), "-1", catTrain1[,i]))) 
+ } 
> for(i in 1:ncol(catTest1)){ 
+ catTest1[,i] <- as.factor(as.character(ifelse(is.na(catTest1[,i]), "-1", catTest1[,i]))) 
+ } 

이야 후 : 내가 문자 하나를 사용하여 변화를 본 적이

> table(catTrain1[,"Cat_111"]) 

    1 2 
726 25 
> table(catTest1[,"Cat_111"]) 

    1 2 3 
    1 503 15 

-> 수치 변환이 가능하지만 왜 이런 일이 일어나는지 알 수 없습니다. 특히 데이터 프레임/루프 중 하나에 대해서만 그렇습니다.

제안 사항?

+1

약간의 데이터를 제공해 주시겠습니까? –

답변

2

table에 대한 첫 번째 호출 집합의 열 이름이 요인의 수준입니다. table에 대한 두 번째 호출 집합에서 열 이름이 수준 인덱스입니다. ifelse은 레벨이 아니라 인덱스를 당깁니다. 루프에서 as.character을 마지막으로 catTest1[,i]catTrain1[,i] 부근으로 이동하십시오.

+0

그랬습니다. 고맙습니다. – screechOwl

2

대신 사용해보십시오. (더 많은 r-like, vectorized) :

levels(catTest1[,"Cat_111"]) <- c(catTest1[,"Cat_111"], "-1") 
catTest1[,"Cat_111"][ is.na(catTest1[,"Cat_111"]) ] <- -1 
관련 문제