2011-01-17 1 views

답변

2

두 명령은 완전히 똑같지 만 정확하지는 않습니다. 특히 요소의 원래 순서가 유지되는 경우 특히 그렇습니다. 경우에 따라as.factor(as.character(f))을 사용할 수 없습니다. 참조 :

par(mfrow=c(2,3)) 
f <- factor(c("D", "B", "C", "K", "A"), levels=c("K", "B", "C", "D"))[2:4] 
plot(f, main="Original factor") 
f.fc <- as.factor(as.character(f)) 
plot(f.fc, main="as.factor(as.character(f))") 
f.d <- drop.levels(f) 
plot(f.d, main="drop.levels(f)") 
f.d <- drop.levels(f, reorder=FALSE) 
plot(f.d, main="drop.levels(f, reorder=FALSE))") 
f.f <- factor(f) 
plot(f.f, main="factor(f)") 

alt text

as.factor(as.character(f))drop.levels(f)는 동일한을 수행하고 그들은 요소의 원래 순서를 유지하지 않습니다, 그들은 모두 다시 레벨 ABC 순서의 텍스트. 주문을 보존하려면 reorder=FALSE 옵션을 drop.levels()에 사용할 수 있습니다.

이것은 기본 동작은 factor()입니다.

2

사용하지 않는 수준을 삭제하려는 경우, 당신이 할 필요가있다 :

x <- factor(x) 
+0

factor (x)는 as.factor (as.character (x))와 동일합니까? – lokheart

+0

예, 요인 (x)은 동일한 결과를 갖습니다. –

+0

+1 좋은 +1! ... –

2

새로운 R에 (버전 2.12.0에서) 같은 일을 할 수있는 기능 droplevels()입니다. 다음과 같이 구현됩니다 :

> base:::droplevels.factor 
function (x, ...) 
factor(x) 
<environment: namespace:base> 

그래서이 기능을 사용하지 않을 것입니다. 클래스 "factor""data.frame"의 객체에 대한 메소드를 가진 R의 일반 함수입니다.이 함수는 데이터 삭제가 필요한 많은 요소가있는 경우 유용합니다.

관련 문제