首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据框中的数字代码替换为(data.frame)查找表中的值标签?

如何将数据框中的数字代码替换为(data.frame)查找表中的值标签?
EN

Stack Overflow用户
提问于 2012-04-15 08:37:58
回答 1查看 2.4K关注 0票数 4

这是this question的一个后续问题,最初受到this question的启发,但并不完全相同。

这就是我的处境。首先,我从数据库中提取一些数据,

代码语言:javascript
复制
df <- data.frame(id = c(1:6),
                 profession = c(1, 5, 4, NA, 0, 5))
   df
#  id profession
#  1          1
#  2          5
#  3          4
#  4         NA
#  5          0
#  6          5

第二,我拉出一个密钥表,里面有人类可读的职业代码信息,

代码语言:javascript
复制
profession.codes <- data.frame(profession.code = c(1,2,3,4,5),
                               profession.label = c('Optometrists',
                               'Accountants', 'Veterinarians', 
                               'Financial analysts',  'Nurses'))                 
   profession.codes
#  profession.code   profession.label
#               1       Optometrists
#               2        Accountants
#               3      Veterinarians
#               4 Financial analysts
#               5             Nurses

现在,我想用profession.codes中的标签覆盖我的df中的profession变量,最好使用plyr包中的join,但我对任何智能解决方案都持开放态度。虽然我很喜欢这样,但ply保留了x的顺序。

我现在是这样做的,

代码语言:javascript
复制
# install.packages('plyr', dependencies = TRUE)
library(plyr)

profession.codes$profession <- profession.codes$profession.code
df <- join(df, profession.codes, by="profession")
# levels(df$profession.label)
df$profession.label <- factor(df$profession.label, 
   levels = c(levels(df$profession.label), 
   setdiff(df$profession, df$profession.code)))
# levels(df$profession.label)
df$profession.label[df$profession==0 ] <- 0
df$profession.code <- NULL
df$profession  <- NULL
names(df) <- c("id", "profession")
df
#  id         profession
#  1       Optometrists
#  2             Nurses
#  3 Financial analysts
#  4               <NA>
#  5                  0
#  6             Nurses

这就是我在不丢失NA0的情况下重写profession的方法。

问题是,0可以是17或任何数字,我想以某种方式说明这一点。此外,如果可能的话,我还想缩短我的代码。

任何帮助都将不胜感激。

谢谢你,埃里克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-15 09:00:33

这是base中的一种方法:

代码语言:javascript
复制
df <- data.frame(id = c(1:6),
                 profession = c(1, 5, 4, NA, 0, 5))

pc <- data.frame(profession.code = c(1,2,3,4,5),
                               profession.label = c('Optometrists',
                               'Accountants', 'Veterinarians', 
                               'Financial analysts',  'Nurses'))  


df$new <- as.character(pc[match(df$profession,  
    pc$profession.code), 'profession.label'])
df[is.na(df$new), 'new'] <- df[is.na(df$new), 'profession'] 
df$new <- as.factor(df$new)
df

这会产生:

代码语言:javascript
复制
  id profession                new
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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10158617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档