2013-09-05 1 views
2

는 내가 data.frame을 가지고 있고 나는이 할 수 있도록 요인 변수의 수준을 변경하려면 :R : 함수 내부의 변경 수준은

> df1 <- data.frame(id = 1:5, fact1 = factor(letters[1:5])) 
> head(df1) 
    id fact1 
1 1  a 
2 2  b 
3 3  c 
4 4  d 
5 5  e 
> levels(df1$fact1)[which(levels(df1$fact1) == 'a')] <- 'missing' 
> df1 
    id fact1 
1 1 missing 
2 2  b 
3 3  c 
4 4  d 
5 5  e 

을하지만 함수 내에서이 작업을 수행하려고하면 그것은집니다 새 값에 이르기까지 모든 :

changeLevel1 <- function(x){ 
levels(x)[which(levels(x) == 'a')] <- 'missing' 
} 

df1$fact1 <- changeLevel1(df1$fact1) 

> df1 
    id fact1 
1 1 missing 
2 2 missing 
3 3 missing 
4 4 missing 
5 5 missing 

이 작업을 수행하는 올바른 방법은 무엇입니까?

답변

3

할당 결과 (missing)가 아닌 전체 객체 x을 반환해야합니다.

changeLevel1 <- function(x){ 
    levels(x)[which(levels(x) == 'a')] <- 'missing' 
    return (x) 
}