我的问题是我想将所有缺失值更改为多个列的每个组的平均值。我想使用dplyr
,但它对我不起作用
例如
iris2 <- iris
set.seed(1)
iris2[-5] <- lapply(iris2[-5], function(x) {
x[sample(length(x), sample(10, 1))] <- NA
x
})
impute_missing=function(x){
x[is.na(x)]=mean(x,na.rm=TRUE)
return(x)
}
iris2 %>% groupby (Species) %>% sapply(impute_missing)
然而,代码并没有将物种的遗漏归咎于每个列的所有非缺失值的平均值。另一个奇怪的是该函数也被应用于Species
组变量。是否有任何方法可以通过物种来估算均值并保留完整的数据框/
答案 0 :(得分:4)
尝试:
library(dplyr)
iris2New <- iris2 %>%
group_by(Species) %>%
mutate_each(funs(mean=mean(., na.rm=TRUE)), contains("."))
iris2[,-5][is.na(iris2)[,-5]] <- iris2New[,-5][is.na(iris2)[,-5]]
iris2
或者,您可以在初始数据集ifelse
iris2
fun1 <- function(x) ifelse(is.na(x), mean(x, na.rm=TRUE), x)
iris3 <- iris2 %>%
group_by(Species) %>%
mutate_each(funs(fun1), contains(".") )
identical(as.data.frame(iris3), iris2)
#[1] TRUE
或者,您可以使用
代替function
iris4 <- iris2 %>%
group_by(Species) %>%
mutate_each(funs(ifelse(is.na(.), mean(., na.rm=TRUE), .)), contains(".") )
identical(iris3,iris4)
#[1] TRUE