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

使用case_when()与mutate()时无法将新变量保存至数据框的问题

解决方法

你的代码问题在于没有将mutate生成的结果赋值回数据框,管道操作只会返回处理后的结果,但不会自动修改原数据对象。按以下两种方式修改即可:

方式1:覆盖原数据框

将处理后的结果重新赋值给原data,新变量会直接保存到原数据框中:

data <- data %>%
  mutate(motivation = case_when(DRG_WHY_TRY == 1 ~ 'experimentation'
                                ,DRG_WHY_SLP == 1 ~ 'cope'
                                ,DRG_WHY_RLX == 1 ~ 'cope'
                                ,DRG_WHY_PAN == 1 ~ 'medical'
                                ,DRG_WHY_NTH == 1 ~ 'bored'
                                ,DRG_WHY_NCN == 1 ~ 'no conseq'
                                ,DRG_WHY_MED == 1 ~ 'medical'
                                ,DRG_WHY_HIG == 1 ~ 'enhancement'
                                ,DRG_WHY_FUN == 1 ~ 'social'
                                ,DRG_WHY_FRD == 1 ~ 'conformity'
                                ,DRG_WHY_FGT == 1 ~ 'cope'
                                ,DRG_WHY_FEL == 1 ~ 'enhancement'
                                ,DRG_WHY_ANX == 1 ~ 'cope'
                                ,TRUE ~ 'else'))

方式2:保存到新数据框

如果不想修改原数据,可将结果存入新对象,避免覆盖原始数据:

data_with_motivation <- data %>%
  mutate(motivation = case_when(DRG_WHY_TRY == 1 ~ 'experimentation'
                                ,DRG_WHY_SLP == 1 ~ 'cope'
                                ,DRG_WHY_RLX == 1 ~ 'cope'
                                ,DRG_WHY_PAN == 1 ~ 'medical'
                                ,DRG_WHY_NTH == 1 ~ 'bored'
                                ,DRG_WHY_NCN == 1 ~ 'no conseq'
                                ,DRG_WHY_MED == 1 ~ 'medical'
                                ,DRG_WHY_HIG == 1 ~ 'enhancement'
                                ,DRG_WHY_FUN == 1 ~ 'social'
                                ,DRG_WHY_FRD == 1 ~ 'conformity'
                                ,DRG_WHY_FGT == 1 ~ 'cope'
                                ,DRG_WHY_FEL == 1 ~ 'enhancement'
                                ,DRG_WHY_ANX == 1 ~ 'cope'
                                ,TRUE ~ 'else'))

额外提示

如果数据中存在多个DRG_WHY_*变量同时为1的情况,case_when只会取第一个匹配的分类。若需要处理多动机的场景,可调整逻辑(比如用if_any标记多匹配,或合并对应分类)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:47:22