[R] Quick recode of -999 to NA in R

Kenn Konstabel lebatsnok at gmail.com
Wed Mar 30 15:28:29 CEST 2011


It could be done in a large number of ways depending on how often you
need it etc.
You might take a look at defmacro in package gtools:

# library(gtools)
setNA <- macro(df, var, values)
{
    df$var[df$var %in% values] <- NA
}

then instead of
> dat0[dat0$e1dq==-999.00000000,"e1dq"] <- NA
you could have

setNA(dat0, e1dq, -999)

Otherwise, with lapply, you could have

dat0.na_ized <- lapply(dat0, function(x) x[x%in% 999.00000] <- NA)
(but I didn't try this so I can't tell if you need to use
as.data.frame on the result or not)

Kenn

On Wed, Mar 30, 2011 at 4:15 PM, Christopher Desjardins
<cddesjardins at gmail.com> wrote:
> Hi,
> I am trying to write a loop to recode my data from -999 to NA in R. What's
> the most efficient way to do this? Below is what I'm presently doing, which
> is inefficient. Thanks,
> Chris
>
>
>   dat0 <- read.table("time1.dat")
>
> colnames(dat0) <- c("e1dq", "e1arcp", "e1dev", "s1prcp", "s1nrcp", "s1ints",
> "a1gpar", "a1pias", "a1devt")
>
> dat0[dat0$e1dq==-999.00000000,"e1dq"] <- NA
>
> dat0[dat0$e1arcp==-999.00000000,"e1arcp"] <- NA
>
> dat0[dat0$e1dev==-999.00000000,"e1dev"] <- NA
>
> dat0[dat0$s1prcp==-999.00000000,"s1prcp"] <- NA
>
> dat0[dat0$s1nrcp==-999.00000000,"s1nrcp"] <- NA
>
> dat0[dat0$s1ints==-999.00000000,"s1ints"] <- NA
>
> dat0[dat0$a1gpar==-999.00000000,"a1gpar"] <- NA
>
> dat0[dat0$a1pias==-999.00000000,"a1pias"] <- NA
>
> dat0[dat0$a1devt==-999.00000000,"a1devt"] <- NA
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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