R中基于数值列生成<med/>=med非数值列时mutate报错如何解决
错误原因
- 语法混淆:
~是dplyr::case_when()的专属条件赋值符号,不可用于基础函数ifelse(),ifelse()的标准参数格式为ifelse(判断条件, 条件成立返回值, 条件不成立返回值) - 冗余嵌套:当前分类仅两个分支,无需嵌套两层
ifelse() - 管道引用不规范:
mutate()内可直接用列名引用管道传递的当前数据列,加df$前缀会直接调用原始数据框的对应列,多步管道操作中易引发引用错误 - 规则与预期冲突:你描述的规则为
column >=0赋值>=med,但给出的预期结果中column=0对应<med,若要匹配预期结果,需将判断阈值调整为>0
正确实现代码
写法1:ifelse()实现(二分类场景首选)
严格匹配你描述的规则(0归为>=med):
library(dplyr) df2 <- df %>% mutate(new = ifelse(column >= 0, ">=med", "<med"))
匹配你给出的预期结果(0归为<med):
library(dplyr) df2 <- df %>% mutate(new = ifelse(column > 0, ">=med", "<med"))
写法2:case_when()实现(适合后续多分类扩展)
library(dplyr) df2 <- df %>% mutate(new = case_when( column > 0 ~ ">=med", # 需匹配描述规则则改为column >= 0 TRUE ~ "<med" ))
内容的提问来源于stack exchange,提问作者vcat
相关产品推荐
相关产品推荐

