how do I replace numeric codes with value labels from a lookup table?

dataframe, r, rename, replace, variable-assignment

Solution

You can do it this way:

df <- data.frame(id = c(1:6),
                 profession = c(1, 5, 4, NA, 0, 5))

profession.code <- c(`0` = 0, Optometrists=1, Accountants=2, Veterinarians=3, 
                     `Financial analysts`=4,  Nurses=5)

df$profession.str <- names(profession.code)[match(df$profession, profession.code)]
df
#   id profession     profession.str
# 1  1          1       Optometrists
# 2  2          5             Nurses
# 3  3          4 Financial analysts
# 4  4         NA               <NA>
# 5  5          0                  0
# 6  6          5             Nurses

Note that I had to add a `0` entry in your `profession.code` vector to account for those zeroes.

EDIT: here is an updated solution to account for Eric's comment below that the data may contain any number of profession codes for which there are no corresponding descriptions:

match.idx <- match(df$profession, profession.code)
df$profession.str <- ifelse(is.na(match.idx),
                            df$profession,
                            names(profession.code)[match.idx])

Problem

This question is related to this question, but not quite the same. Say I have this data frame, ``` df <- data.frame( id = c(1:6), profession = c(1, 5, 4, NA, 0, 5)) ``` and a string with human readable information about the profession codes. Say, ``` profession.code <- c( Optometrists=1, Accountants=2, Veterinarians=3, `Financial analysts`=4, Nurses=5) ``` Now, I'm looking for the easiest way to replace the values in `df$profession` with the text found in `profession.code`. Preferably without use of special libraries, unless it shortens the code significantly. I would like my end result to be ``` df <- data.frame( id = c(1:6), profession = c("Optometrists", "Nurses", "Financial analysts", NA, 0, "Nurses")) ``` Any help would be greatly appreciated. Thanks, Eric

Original source

Related problems