将虚拟变量转换为标签向量:DataFrame种族列格式转换需求
将虚拟变量编码的种族列转换为单一分类列
原始数据
df_before <- structure(list(ID = 1:4, White = c(1L, 0L, 0L, 0L), Black = c(0L, 1L, 0L, 0L), Asian = c(0L, 0L, 1L, 1L)), class = "data.frame", row.names = c(NA, -4L))
目标数据
df_after <- structure(list(ID = 1:4, Race = c("White", "Black", "Asian", "Asian")), class = "data.frame", row.names = c(NA, -4L))
解决方案
方法1:使用tidyverse(tidyr + dplyr)
通过宽表转长表筛选出有效分类:
library(tidyverse) df_after <- df_before %>% pivot_longer(cols = -ID, names_to = "Race", values_to = "value") %>% filter(value == 1) %>% select(-value)
方法2:使用base R
通过列索引匹配分类名称:
race_cols <- c("White", "Black", "Asian") df_after <- data.frame( ID = df_before$ID, Race = race_cols[max.col(df_before[, race_cols])] )
方法3:使用dplyr逐行判断
通过条件分支直接映射分类:
library(dplyr) df_after <- df_before %>% rowwise() %>% mutate(Race = case_when( White == 1 ~ "White", Black == 1 ~ "Black", Asian == 1 ~ "Asian" )) %>% ungroup() %>% select(ID, Race)
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

