You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr的mutate()与case_when()报错:未知符号问题求助

问题描述

尝试用dplyr包的mutate()函数处理数据框assn3,需将其中的female列转换为新列female2或gender2(值为1时标记为'female',值为0时标记为'male'),运行以下两段代码均报错:Error: unexpected symbol in: <em>insert input</em>,且此前可正常运行的脚本也失效。

尝试的代码1:

library(dplyr)
assn3 %>% mutate(female2 = case_when(assn3$female == 1 ~ 'female'
                                     assn3$female == 0 ~ 'male'))

尝试的代码2:

library(dplyr)
assn3 %>% 
  mutate(gender2 = case_when(assn3$female == 1 ~ 'female'
                             assn3$female == 0 ~ 'male'))
错误原因

报错核心是case_when()的语法错误:每个条件-结果对之间必须用逗号分隔,你在两个assn3$female == ...的条件之间未添加逗号,导致R解析代码时无法识别后续语句,触发"unexpected symbol"错误。此外,在管道操作%>%中,无需用assn3$引用列,直接写列名即可,原代码中的这种写法属于冗余操作。

解决方法与替代方案

修正后的dplyr写法

补全case_when()的逗号分隔符,同时简化列引用:

library(dplyr)
# 生成female2列
assn3 <- assn3 %>% 
  mutate(female2 = case_when(
    female == 1 ~ 'female',
    female == 0 ~ 'male'
  ))

# 生成gender2列的写法
assn3 <- assn3 %>% 
  mutate(gender2 = case_when(
    female == 1 ~ 'female',
    female == 0 ~ 'male'
  ))

更简洁的二分类转换方案

针对仅两种取值的转换场景,用ifelse()替代case_when()更高效:

library(dplyr)
assn3 <- assn3 %>% 
  mutate(gender2 = ifelse(female == 1, 'female', 'male'))

基础R替代方案(无需依赖dplyr)

若dplyr包出现异常,可直接用基础R代码完成转换:

assn3$gender2 <- ifelse(assn3$female == 1, 'female', 'male')

内容的提问来源于stack exchange,提问作者maddiekraw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:00:47