首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的Recode列

R中的Recode列
EN

Stack Overflow用户
提问于 2018-11-28 20:21:43
回答 2查看 181关注 0票数 1

我有一个大型数据集,需要将几个数值变量重新编码为其他数值。我的数据集的一部分如下所示:

代码语言:javascript
复制
condition.10 financial.condition behavior.condition outcome Gender Race
1            6                   1                  3       0   Male    5
2            7                   0                  4       0 Female    5
3            5                   0                  3       1 Female    5
4            2                   1                  1       1   Male  2,5
5           10                   1                  5       0 Female    5
6            6                   1                  3       1   Male    5

我想把比赛分为3个“垃圾桶”,分别是1,2,3-“白色”、“黑色”和“其他”。我已经成功地通过以下代码实现了这一点:

代码语言:javascript
复制
mydata$Race <- NA
mydata$Race <- mydata$Q73
mydata$Race[mydata$Race==1|mydata$Race==2|mydata$Race==4|mydata$Race==6]<-6
mydata$Race[mydata$Race==3]<-2
mydata$Race[mydata$Race==5]<-1
mydata$Race[mydata$Race==6]<-3

我也试过这个:

代码语言:javascript
复制
case_when(mydata$Race %in% c(1,2,4,6) ~3,
mydata$Race %in% 3 ~ 2,
mydata$Race %in% 5 ~1,
TRUE ~ as.numeric(mydata$Race))

第一步给了我所需要的,但它不考虑人们检查两场比赛,如在第四排。

如有任何建议,将不胜感激。我已经准备好了,从汽车包装和dplyr。

也许这只是因为我很新,但是不能做基本的事情会让我很伤心。

代码语言:javascript
复制
unique(mydata$Race)
# [1] 5 2,5 2 3 6 3,5 1,5 1,2,4,5 1 1,2,5 4,6 3,6 2,3 1,3 4
# [16] 2,4,5,6 1,3,5 4,5
# Levels: 1 1,2,4,5 1,2,5 1,3 1,3,5 1,5 2 2,3 2,4,5,6 2,5 3 3,5 3,6 4 4,5 4,6 5 6

注:,我对R非常陌生,正在寻找一些指导。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-28 21:06:19

我们可以创建一个名为向量的查找,然后通过值循环:

代码语言:javascript
复制
# example data
df1 <- data.frame(Race = c("1", "2", "3", "4", "5", "5,2", "6"))

# map, named vector
lookup <- setNames(c(3, 3, 2, 3, 1, 3), 1:6)
# 1 2 3 4 5 6 
# 3 3 2 3 1 3 

df1$RaceClean <- sapply(as.character(df1$Race), function(i){
  paste(lookup[ unlist(strsplit(i, ",")) ], collapse = ",")
  })

df1
#   Race RaceClean
# 1    1         3
# 2    2         3
# 3    3         2
# 4    4         3
# 5    5         1
# 6  5,2       1,3
# 7    6         3
票数 0
EN

Stack Overflow用户

发布于 2018-11-28 20:32:17

我们可以创建一个查找表与种族代码,您正在寻找。任何不在那张桌子上的东西,我们都可以称之为“其他”。

代码语言:javascript
复制
library(tidyverse)

#create a lookup table
RaceTable <- data.frame(Race = c(3, 5),
                        RaceName = c("White", "Black"),
                        stringsAsFactors = FALSE)

mydata %>% 
  #bring in RaceName from the lookup table
  left_join(RaceTable, by = c("Race" = "Race")) %>% 
  #if there is no RaceName, call it "Other"
  mutate(RaceName = replace(RaceName, is.na(RaceName), "Other"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53527492

复制
相关文章

相似问题

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