R语言ifelse多分类变量转换错误问题求助
解决R语言变量分类转换的匹配问题
问题根源
你代码里的字符串匹配存在空格不一致的问题:示例数据中Chamber类的取值都是"Court (Xxx Section)"(Court和括号之间有空格),但你在ifelse里写的是"Court(Fifth Section)"(无空格),导致匹配失败,本该属于Chamber的类别全部落入了最后的else分支(Committee)。
解决方案
方案1:修正ifelse的匹配字符串
补全匹配字符串里的空格,修正后的代码如下:
df$origin.simple <- ifelse(df$Originating_body == "Court (Grand Chamber)" | df$Originating_body == "Court (Plenary)", "Grand Chamber", ifelse(df$Originating_body == "Court (Chamber)" | df$Originating_body == "Court (Fifth Section)" | df$Originating_body == "Court (Fourth Section)" | df$Originating_body == "Court (Third Section)" | df$Originating_body == "Court (Second Section)" | df$Originating_body == "Court (First Section)", "Chamber", "Committee"))
方案2:用dplyr::case_when(更清晰易读)
嵌套ifelse层级过多易出错,case_when的语法更直观,也能降低拼写失误概率:
library(dplyr) df <- df %>% mutate(origin.simple = case_when( Originating_body %in% c("Court (Grand Chamber)", "Court (Plenary)") ~ "Grand Chamber", Originating_body %in% c("Court (Chamber)", "Court (Fifth Section)", "Court (First Section)", "Court (Fourth Section)", "Court (Second Section)", "Court (Third Section)") ~ "Chamber", TRUE ~ "Committee" # 剩余类别自动归为Committee ))
方案3:直接重编码Factor(适用于原变量为Factor类型)
如果Originating_body是Factor类型,直接修改层级比转字符更高效:
# 确保变量为Factor类型 df$Originating_body <- factor(df$Originating_body) # 重编码层级 levels(df$Originating_body) <- list( "Grand Chamber" = c("Court (Grand Chamber)", "Court (Plenary)"), "Chamber" = c("Court (Chamber)", "Court (Fifth Section)", "Court (First Section)", "Court (Fourth Section)", "Court (Second Section)", "Court (Third Section)"), "Committee" = setdiff(levels(df$Originating_body), c("Court (Grand Chamber)", "Court (Plenary)", "Court (Chamber)", "Court (Fifth Section)", "Court (First Section)", "Court (Fourth Section)", "Court (Second Section)", "Court (Third Section)")) ) # 可选:重命名变量 names(df)[names(df) == "Originating_body"] <- "origin.simple"
验证结果
执行完代码后,可通过table(df$origin.simple)查看分类计数,确认各类别是否正确归属。
内容的提问来源于stack exchange,提问作者Helga
相关产品推荐
相关产品推荐

