如何将NA更改为列中位数

时间:2017-06-05 05:35:04

标签: r

数据框包含123列, 每列的NA值至少为1。

我希望将这些NA值替换为列中位数。 因为列数太多,我无法使用每个列名编写代码。

所以我尝试使用' apply'要解决这个问题,但它没有成功。

data2[-1]<-lapply(data2[-1],function(x)x - median(x,na.rm=TRUE))

它说它不起作用,因为它是数据框,而不是数字。

3 个答案:

答案 0 :(得分:1)

我们可以使用na.aggregate

 library(zoo)
 j1 <- sapply(df1, is.numeric)
 df1[j1] <- na.aggregate(df1[j1], FUN = median) 

答案 1 :(得分:1)

我们可以使用map2_df

library(purrr)
df <- data.frame(a = c(1, 2, 3), b = c(2, NA, 9), c = c(NA, 3, 5), d = c(0, 4, NA))
purrr::map2_df(df, purrr::dmap(df, median, na.rm = TRUE), function(x, y) ifelse(is.na(x), y, x))

答案 2 :(得分:0)

for(i in 1:ncol(df)){
  df[is.na(df[,i]), i] <- median(df[,i], na.rm = TRUE)
}