R语言中用dplyr的case_when生成新列报错,寻求技术帮助
问题解决:R语言case_when新增列报错修复
你的代码存在语法和逻辑错误,导致运行报错,以下是修正方案及错误说明:
错误点梳理
- 语法错误:第一个条件
ColumnY == <= 30是无效写法,==与<=不能组合使用,且你漏了规则中的下限-30,正确范围应为-30到30。 - between函数误用:
between()的正确语法是between(待判断变量, 下限, 上限),你颠倒了变量与上下限的位置,且无需额外加==(between本身返回逻辑值)。 - 缺失值处理错误:
TRUE ~ "NA"会生成字符串"NA",而非R中标准的缺失值NA,需改用NA或NA_character_。 - 范围不符需求:规则中Late的上限是300,你写的305不符合要求。
修正后的代码
DataSetNew <- DataSet %>% dplyr::mutate(ColumnZ = case_when( ColumnY >= -30 & ColumnY <= 30 ~ "Transition", between(ColumnY, 31, 100) ~ "Early", between(ColumnY, 101, 200) ~ "Mid", between(ColumnY, 201, 300) ~ "Late", TRUE ~ NA_character_ # 返回标准缺失值,而非字符串"NA" ))
补充说明
NA_character_确保ColumnZ为字符型列,若需因子型可后续用as.factor(ColumnZ)转换。- case_when按顺序匹配条件,前面的范围匹配后不会进入后续判断,无需担心范围重叠问题。
内容的提问来源于stack exchange,提问作者Virgilio
相关产品推荐
相关产品推荐

