Hi Val, You could do this by nesting 2 for loops, and defining a function such that it returns the mean of the column when the value is ‘NA’.
df1 <- data.frame(x = c(25, 30, 40, 26, 60), y = c(122, 135, NA, 157, 195), z = c(352, 376, 350, NA, 360)); df2 <- df1[0, ] means <- sapply(df1, mean, na.rm = T); return_mean_if_NA <- function(x, y) { if (is.na(x)){ x <- y } else { return(x) } } for (i in 1:ncol(df1)){ for (j in 1:nrow(df1)){ df2[j, i] <- return_mean_if_NA(df1[j, i], means[i]) } } Hope this helps! Regards, Bo Lin > On 27 Apr 2017, at 8:45 AM, Val <valkr...@gmail.com> wrote: > > HI all, > > I have a data frame with three variables. Some of the variables do > have missing values and I want to replace those missing values > (1represented by NA) with the mean value of that variable. In this > sample data, variable z and y do have missing values. The mean value > of y and z are152. 25 and 359.5, respectively . I want replace those > missing values by the respective mean value ( rounded to the nearest > whole number). > > DF1 <- read.table(header=TRUE, text='ID1 x y z > 1 25 122 352 > 2 30 135 376 > 3 40 NA 350 > 4 26 157 NA > 5 60 195 360') > mean x= 36.2 > mean y=152.25 > mean z= 359.5 > > output > ID1 x y z > 1 25 122 352 > 2 30 135 376 > 3 40 152 350 > 4 26 157 360 > 5 60 195 360 > > > Thank you in advance > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.