Try:
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
Or you can use ifelsein the original datasetiris2
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)
function
iris4 <- iris2 %>%
group_by(Species) %>%
mutate_each(funs(ifelse(is.na(.), mean(., na.rm=TRUE), .)), contains(".") )
identical(iris3,iris4)