从R

时间:2015-05-30 14:14:12

标签: r

我有一个包含数字和名义数据的数据集。数字列具有NA,并且我希望用中值替换那些NA。对于名义数据,我只是空字符串""我喜欢用最常见的值替换它们。到目前为止我得到了这个:

replaceNA <- function(x) {
  if (is.numeric(x)) {
    colMedian <- median(x, na.rm = TRUE)
  } else {
    colMax <- names(which.max(table(x)))
  }
}

如何检查每一列并替换NA和&#34;&#34;?

1 个答案:

答案 0 :(得分:3)

尝试

replaceNA <- function(x) {
             v1 <- if(is.numeric(x))
                     median(x, na.rm=TRUE)
                 else names(which.max(table(x[x!=''])))
               replace(x, which(x %in% c(NA, '')), v1)
              }

df1[] <- lapply(df1, replaceNA)

或者

library(dplyr)
df1 %>% 
      mutate_each(funs(replaceNA(.)))

数据

set.seed(24)
df1 <- data.frame(Col1= sample(c(LETTERS[1:3], ''), 10, replace=TRUE), 
       Col2=sample(c(1:5, NA), 10, replace=TRUE),
      Col3= sample(c(4:6, NA), 10, replace=TRUE), stringsAsFactors=FALSE)