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

使用mutate_at结合case_when时出现unexpected symbol错误求助

问题:数据框指定列分数转换代码报错

我有一个数据框df,需要对q_switch向量指定的列(如E1、E2、E3等)进行分数转换,转换规则为:5替换为1,4替换为2,2替换为4,1替换为5。尝试使用以下代码实现:

data%>%
mutate_at(
.vars = vars(q_switch),
.funs = funs(. = case_when(
. == 5 ~ 1
. == 4 ~ 2
. == 2 ~ 4
. == 1 ~ 5
)))

但运行时出现错误:

Error: unexpected symbol in:
"          . == 5 ~ 1
."

请问我哪里出错了?

问题原因与修复方案
  • 核心语法错误:case_when中每个条件-结果对之间必须用逗号分隔,你漏掉了每一行末尾的逗号,导致R解析代码时无法识别后续的条件。
  • 次要问题:代码里用的是data,但你描述的是数据框df,需要保持名称一致;另外mutate_at是dplyr旧版语法,新版推荐使用mutate(across(...))写法,兼容性更好。

修正后的旧版语法代码

df %>%
  mutate_at(
    .vars = vars(q_switch),
    .funs = funs(. = case_when(
      . == 5 ~ 1,
      . == 4 ~ 2,
      . == 2 ~ 4,
      . == 1 ~ 5
    ))
  )

推荐的新版dplyr语法(更清晰)

df %>%
  mutate(across(all_of(q_switch), ~ case_when(
    .x == 5 ~ 1,
    .x == 4 ~ 2,
    .x == 2 ~ 4,
    .x == 1 ~ 5
  )))

注:如果q_switch是字符串向量(比如q_switch <- c("E1", "E2", "E3")),all_of()可以确保正确匹配列名;如果是直接的列引用,也可以去掉all_of()。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:50:27