# [R] missing and replace

Ng Bo Lin ngbolin91 at gmail.com
Thu Apr 27 03:21:31 CEST 2017

```Apologies, I re-read the question and realised you hope to replace the missing values rounded to the nearest whole number.

Here’s the code in full.

df1 <- data.frame(x = c(25, 30, 40, 26, 60), y = c(122, 135, NA, 157, 195), z = c(352, 376, 350, NA, 360))

means <- sapply(df1, mean, na.rm = T); return_mean_if_NA <- function(x, y) { if (is.na(x)){ x <- y } else { return(x) } }

df2 <- df1[0, ]

for (i in 1:ncol(df1)){
for (j in 1:nrow(df1)){
df2[j, i] <- round(return_mean_if_NA(df1[j, i], means[i]), 0)
}
}

HTH.

Regards,
Bo Lin

> On 27 Apr 2017, at 9:19 AM, Ng Bo Lin <ngbolin91 at gmail.com> wrote:
>
> 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 <valkremk at 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).
>>
>> 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
>>
>>