R语言使用dplyr基于5个0/1列生成model列及case_when报错解决
R代码修正方案
原代码核心错误点
- 管道运算符拼写错误:仅写了
%>,正确的dplyr管道运算符为%>% - 新建列赋值符号错误:mutate内给新列赋值需用
=,你误用了用于相等判断的== - case_when语法错误:无需嵌套多层case_when,所有判断规则直接作为同一case_when的参数即可,每个规则统一为「逻辑条件 ~ 返回值」的二项式结构
- 返回值类型不统一:1-5加了单引号为字符类型,默认返回的0为数值类型,类型冲突会引发报错
完整实现代码
首先读入数据源:
# 读入04cars.csv数据 cars <- read.csv("04cars.csv") # 加载dplyr包 library(dplyr)
生成model列的处理代码:
cars <- cars %>% mutate(model = case_when( Sport == 1 ~ 1, SUV == 1 ~ 2, Wagon == 1 ~ 3, Minivan == 1 ~ 4, Pickup == 1 ~ 5, TRUE ~ 0 ))
补充说明
- case_when会按编写顺序依次匹配条件,匹配到第一个符合的条件后就会返回对应值,不会再判断后续条件,完全符合你设定的优先级规则
- 如果需要model列为字符类型,只需要把所有返回值统一加单引号即可:
~ '1'、~ '2'……~ '0',保证所有返回值类型统一即可
内容的提问来源于stack exchange,提问作者Jim Ryan
相关产品推荐
相关产品推荐

