我怎么替换值标签数字代码从查找表?(how do I replace numeric codes w

2019-06-23 09:00发布

这个问题是涉及到这个问题 ,但并不完全一样。

说我有这个数据帧,

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

和有关行业规范人类可读的信息串。 说,

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

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

我想我的最终结果是

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

任何帮助将不胜感激。

谢谢,埃里克

Answer 1:

你可以这样来做:

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

请注意,我不得不添加一个0在你进入profession.code矢量考虑到这些零。

编辑:这是一个更新的解决方案,以考虑下面的数据可以包含任意数量的用于其中有没有相应的说明行业代码Eric的评论:

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


Answer 2:

我打得四处它,这是一个使用我目前的解决方案car包。

pLoop <- function(v) paste(profession.code[v],"='", names(profession.code[v]),"';") 
library(car)
df$profession<- recode(df$profession, paste(sapply(1:5, pLoop),collapse=""))

df
# id           profession
#  1         Optometrists 
#  2               Nurses 
#  3   Financial analysts 
#  4                 <NA>
#  5                    0
#  6               Nurses 

尽管如此兴趣,如果任何人有一个解决方案其他建议。 我宁愿只使用基本功能R.它做的事



Answer 3:

我个人比较喜欢的方式arules一揽子交易这一问题,使用decode功能。 从文档:

library(arules)
data("Adult")

## Example 1: Manual decoding
## get code
iLabels <- itemLabels(Adult)
head(iLabels)

## get undecoded list and decode in a second step
list <- LIST(Adult[1:5], decode = FALSE)
list

decode(list, itemLabels = iLabels)

优点是包还提供了功能encoderecode 。 他们各自的目的很简单,我相信。



文章来源: how do I replace numeric codes with value labels from a lookup table?