[R] Replacing NAs in a data frame using is.na() fails if there are no NAs

Prof Brian Ripley ripley at stats.ox.ac.uk
Fri Jan 14 12:56:45 CET 2005


On Fri, 14 Jan 2005, michael watson (IAH-C) wrote:

> Hi
>
> This is a difference between the way matrices and data frames work I
> guess.  I want to replace the NA values in a data frame by 0, and the
> code works as long as the data frame in question actually includes an NA
> value.  If it doesn't, there is an error:
>
> df <- data.frame(c1=c(1,1,1),c2=c(2,2,NA))
> df[is.na(df)] <- 0
> df
>
> df <- data.frame(c1=c(1,1,1),c2=c(2,2,2))
> df[is.na(df)] <- 0
> Df
>
> Any help would be appreciated.  I could just convert the data frame to a
> matrix, execute the code, then convert it back to a data frame, but that
> appears long winded.

As always, look at the objects:

> is.na(df)
      c1    c2
1 FALSE FALSE
2 FALSE FALSE
3 FALSE FALSE

so there is nothing to replace by 0.

What you should have is

ind <- is.na(df)
df[ind] <- rep(0, sum(ind))

to give the right number of replacements.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list