通过R

时间:2017-04-15 22:59:31

标签: r

我有一个非常大的数据集,我希望在所有连续变量中将中位数归入缺失值,并将“不可用”填入所有分类。

data[ ,sapply(data, is.numeric)]

data[ ,sapply(data, is.character)]

我正在使用这些函数来确定哪个是哪个,但我不知道如何使用它们来做我想要的。任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

以下代码可行。我不确定是否有更有效的方法来做到这一点。

library(data.table)

dt = data.table(continuous = c(rnorm(5), NA), categorical = c(LETTERS[1:5],NA))

> dt
    continuous categorical
1:  0.77044982           A
2:  0.12955447           B
3: -0.03965276           C
4:  1.59332441           D
5:  0.21909899           E
6:          NA          NA

fixColumns = function(x){
  if(class(x) %in% c("factor", "character")){
    if(any(is.na(x))){
      x[is.na(x)] = "Not Available"
      return(x)
    }else{
      return(x)
    }
  }else{
    if(any(is.na(x))){
      x[is.na(x)] = median(x, na.rm = TRUE)
      return(x)
    }else{
      return(x)
    }
  }
}

dt = dt[ , lapply(.SD, fixColumns)]

> dt
    continuous   categorical
1:  0.77044982             A
2:  0.12955447             B
3: -0.03965276             C
4:  1.59332441             D
5:  0.21909899             E
6:  0.21909899 Not Available