使用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
相关产品推荐
相关产品推荐

