2013-09-05 69 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

您需要返回完整对象x而不仅仅是您的任务结果(它是字符串missing)。

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