x <- data.frame(d=letters[1:3], e=letters[3:5])
lookuptable <- c(a="aa", c="cc", e="ee")
match.or.keep <- function(x, lookuptable) {if (is.factor(x)) x <- as.character(x); 
m <- match(x, names(lookuptable)); ifelse(is.na(m), x, lookuptable[m])}
# to return a matrix
apply(x, 2, match.or.keep, lookuptable=lookuptable)
d e [1,] "aa" "cc" [2,] "b" "d" [3,] "cc" "ee"
# to return a data frame
as.data.frame(lapply(x, match.or.keep, lookuptable=lookuptable))
  d  e
1 aa cc
2  b  d
3 cc ee



Jill Hollenbach wrote:
Let me clarify:
I'm using this--

dfnew<- sapply(df, function(df) lookuptable[match(df, lookuptable [ ,1]),
2])

lookup
0101   01:01
0201   02:01
0301   03:01
0401   04:01

df
0101   0301
0201   0401
0101   0502

dfnew
01:01   03:01
02:01   04:01
01:01   NA

but what I want is:
dfnew2
01:01   03:01
02:01   04:01
01:01   0502

thanks again,
Jill




Jill Hollenbach wrote:
Hi all,
I think this is a very basic question, but I'm new to this so please bear
with me.

I'm using match to translate elements of a data frame using a lookup
table. If the content of a particular cell is not found in the lookup
table, the function returns NA. I'm wondering how I can just ignore those
cells, and return the original contents if no match is found in the lookup
table.

Many thanks in advance, this site has been extremely helpful for me so
far,
Jill

Jill Hollenbach, PhD, MPH
    Assistant Staff Scientist
    Center for Genetics
    Children's Hospital Oakland Research Institute
    jhollenb...@chori.org



______________________________________________
R-help@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.

Reply via email to