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

使用case_when处理空字符串场景,构建迁移背景分类变量mig_1

修正儿童家庭语言数据集的迁移背景分类变量构建

我们需要为儿童家庭语言数据集生成分类变量mig_1(0=无迁移背景,1=有迁移背景),修正原有录入误差。现有代码已覆盖部分场景,但未处理mig==0(仅德语)或mig==NA且sprache字段非空的情况,需补充case_when逻辑完善变量生成。

数据集示例

kommschreib <- data.frame (
  code = c("013101", "013102", "013205", "114113", "014201", "053216"),
  mig = c(0, NA, 1, 2, 1, 0),
  englisch = c(0, 1, 1, 0, 0),
  sprache = c("niederländisch", "italienisch", NA, NA, NA, NA)
)

现有代码问题分析

现有代码存在逻辑冗余(重复判断mig==0加各语言字段为1的情况),且未覆盖两个关键场景:

  • mig==0但sprache字段非空(说明家庭有非德语语言,属于迁移背景)
  • mig==NA但sprache字段非空(需通过语言字段判断迁移背景)

优化后的完整代码

library(dplyr)
library(sjlabelled)

kommschreib <- kommschreib %>%
  mutate(mig_1 = case_when(
    # 所有标记为有迁移背景的情况
    englisch == 1 | arabisch == 1 | kurdisch == 1 | russisch == 1 | 
    ukrainisch == 1 | farsi == 1 | polnisch == 1 | türkisch == 1 | albanisch == 1 ~ 1,
    mig > 0 ~ 1,
    mig == 0 & !is.na(sprache) ~ 1,  # mig=0但有其他语言记录
    is.na(mig) & !is.na(sprache) ~ 1,  # mig为空但有其他语言记录
    # 标记为无迁移背景的情况
    mig == 0 & is.na(sprache) & englisch == 0 ~ 0,  # mig=0且无其他语言证据
    # 其他未明确的情况设为NA(可根据需求调整)
    TRUE ~ NA_real_
  ) %>%
    labelled(label = "Migrationshintergrund")) %>%
  sjlabelled::set_labels(mig_1, labels = c("dt" = 0, "mig" = 1))

代码逻辑说明

  • 优先判断有迁移背景:只要存在任意指定外语字段为1、mig>0、mig==0但sprache非空、mig==NA但sprache非空,均标记为1
  • 无迁移背景判断:仅当mig==0、sprache为空且所有外语字段为0时,标记为0
  • 未明确场景:其他情况设为NA,可根据实际业务需求调整(比如默认标记为0或1)

示例数据处理结果

执行代码后,示例数据的mig_1结果如下:

  • code=013101:mig=0且sprache非空 → 1
  • code=013102:mig=NA且sprache非空+englisch=1 →1
  • code=013205:mig=1 →1
  • code=114113:mig=2 →1
  • code=014201:mig=1 →1
  • code=053216:mig=0且sprache为空+englisch=0 →0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:05:26