如何使用查找表中的值标签替换数字代码?

Eri*_*ail 9 replace r rename variable-assignment dataframe

这个问题与这个问题有关,但并不完全相同.

说我有这个数据框,

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

以及包含有关行业代码的人类可读信息的字符串.说,

profession.code <- c(
                     Optometrists=1, Accountants=2, Veterinarians=3, 
                     `Financial analysts`=4,  Nurses=5)
Run Code Online (Sandbox Code Playgroud)

现在,我正在寻找df$profession用文本中的文本替换值的最简单方法 profession.code.最好不使用特殊库,除非它显着缩短代码.

我希望我的最终结果是

df <- data.frame(
                id = c(1:6),
                profession = c("Optometrists", "Nurses", 
                "Financial analysts", NA, 0, "Nurses"))
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

谢谢,埃里克

flo*_*del 10

你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

请注意,我必须0profession.code向量中添加一个条目来说明这些零.

编辑:这是一个更新的解决方案,以考虑埃里克的评论,数据可能包含任何数量的行业代码,没有相应的描述:

match.idx <- match(df$profession, profession.code)
df$profession.str <- ifelse(is.na(match.idx),
                            df$profession,
                            names(profession.code)[match.idx])
Run Code Online (Sandbox Code Playgroud)