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

