数据框包含123列, 每列的NA值至少为1。
我希望将这些NA值替换为列中位数。 因为列数太多,我无法使用每个列名编写代码。
所以我尝试使用' apply'要解决这个问题,但它没有成功。
data2[-1]<-lapply(data2[-1],function(x)x - median(x,na.rm=TRUE))
它说它不起作用,因为它是数据框,而不是数字。
答案 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)
}