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.