2017-08-10 47 views
0

我有一个因素列表,每个因素可能有一些NA。现在我想为NA添加一个级别并将其重命名为Missing。我也是要确保Missing是每个级别中的最后一个。这是我的代码,但它不起作用。如何使用NA作为因子级别并将其重命名为R?

data = list(a = factor(c(1,1,2,2,3,NA,NA)), 
      b = factor(c("a","b","b")), 
      c = factor(c(3,4,NA,3))) 
data = lapply(data, FUN = function(x) { 
    if (any(is.na(x))) { 
     x = addNA(x) 
     levels(x)[length(levels(x))] = "Missing" 
    } 
}) 

任何帮助,将不胜感激。

+0

参见[此帖](https://stackoverflow.com/questions/27195956/convert-na-into-a-factor-level)和[此帖](HTTPS ://stackoverflow.com/questions/45216532/how-can-i-keep-na-when-i-change-levels)。 – lmo

回答

2

我们可以尝试

lapply(data, function(x) { 
    if(anyNA(x)) { 
    levels(x) <- c(levels(x), "Missing") 
    x[is.na(x)] <- "Missing" 
    x} 
    else x 

    }) 
#$a 
#[1] 1  1  2  2  3  Missing Missing 
#Levels: 1 2 3 Missing 

#$b 
#[1] a b b 
#Levels: a b 

#$c 
#[1] 3  4  Missing 3  
#Levels: 3 4 Missing