[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).
>> 
>> 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 at 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.
> 



More information about the R-help mailing list