我的数据集很大,需要将一些数字变量重新编码为其他数字值。我的数据集的一部分看起来像这样:
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
我想将比赛重新编码为1、2、3,“白色”,“黑色”和“其他”的3个“ bin”。我设法通过以下代码实现了这一点:
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
我也尝试过:
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中重新编码。
也许只是我这么新,但是无法进行基本操作会很痛。
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的新手,正在寻找指导。
答案 0 :(得分:0)
我们可以使用您要查找的种族代码创建查找表。该表中没有的任何内容,我们都可以称为“其他”。
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"))
答案 1 :(得分:0)
我们可以创建一个名为vector的查找,然后遍历值:
# 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