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

使用R语言case_when函数重新编码新变量时遇到的问题

解决你的R语言变量重编码问题

我来帮你梳理下代码里的问题,以及对应的修正方案:

你的代码核心问题:

  1. 未保存管道操作结果:你第二个mutate用了管道,但没有把计算结果赋值回jungmodell,所以原数据框还是停留在第一个mutate的状态(也就是Identifikationsskala完全等于Parteinah),自然看不到编码后的变化。
  2. 管道内错误引用数据框名:使用dplyr管道时,不需要用jungmodell$来调用列,直接写列名即可,这样代码更简洁,还能避免潜在的作用域问题。
  3. 未提前筛选目标样本:你需要先排除Parteinah为-8、-9的无效样本,同时只保留Parteinah ==1或者parteisympathie为1-3的有效样本,再进行编码操作。

修正后的完整代码:

# 筛选有效样本 + 创建新变量 + 保存回原数据框
jungmodell <- jungmodell %>%
  # 第一步:过滤掉无效样本,只保留需要的样本
  filter(
    Parteinah != -8,
    Parteinah != -9,
    (Parteinah == 1) | (parteisympathie %in% 1:3)
  ) %>%
  # 第二步:根据规则创建Identifikationsskala
  mutate(
    Identifikationsskala = case_when(
      Parteinah == 1 ~ 1,
      parteisympathie == 1 ~ 4,
      parteisympathie == 2 ~ 3,
      parteisympathie == 3 ~ 2,
      # 前面已经筛选过,这里理论上不会触发,用NA标记意外情况
      TRUE ~ NA_real_
    )
  )

代码细节解释:

  • filter步骤:先剔除Parteinah=-8/-9的无效样本,同时只保留两类有效样本——Parteinah=1的受访者,以及parteisympathie为1-3的受访者,确保后续编码只针对目标人群。
  • mutate里的case_when:因为已经提前筛选过,Parteinah>=2的样本必然对应parteisympathie=1-3,所以不需要重复判断Parteinah>=2,直接根据parteisympathie的值完成反向编码即可,逻辑更简洁。
  • 整个管道结果赋值回jungmodell,这样你的数据框就会更新为包含正确新变量的版本。

如果你不想删除无效样本,而是把这些样本的Identifikationsskala设为缺失值(比如NA),可以去掉filter步骤,调整case_when逻辑:

jungmodell <- jungmodell %>%
  mutate(
    Identifikationsskala = case_when(
      # 有效样本的编码规则
      Parteinah == 1 ~ 1,
      Parteinah >=2 & parteisympathie ==1 ~4,
      Parteinah >=2 & parteisympathie ==2 ~3,
      Parteinah >=2 & parteisympathie ==3 ~2,
      # 无效样本设为NA
      TRUE ~ NA_real_
    )
  ) %>%
  # 若需要完全移除NA样本,可加上这一步
  filter(!is.na(Identifikationsskala))

这样就能得到你想要的Identifikationsskala变量啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:22:42