IPUMS CPS数据中残疾二分类变量构建正确性咨询
IPUMS CPS残疾二分类变量构建修正方案
你的NOTDISABLED变量逻辑完全错误——用|(逻辑或)会把只要有一个变量为1的样本都标记为非残疾,这和你需要的「所有残疾相关变量均为1(无任何残疾)才属于非残疾」的要求不符。
正确代码写法(两种可选)
写法一:清晰的逻辑与条件
bias <- bias %>% mutate( # 修正DISABLED:清理重复的变量条件,保留唯一的残疾变量 DISABLED = if_else(DIFFCARE == 2 | DIFFMOB == 2 | DIFFEYE == 2 | DIFFREM == 2 | DIFFPHYS == 2 | DIFFHEAR == 2 | DIFFANY == 2, 1, 0), # 核心修正:用&(逻辑与)确保所有变量都为1才标记为非残疾 NOTDISABLED = if_else(DIFFCARE == 1 & DIFFMOB == 1 & DIFFEYE == 1 & DIFFREM == 1 & DIFFPHYS == 1 & DIFFHEAR == 1 & DIFFANY == 1, 1, 0) )
写法二:用if_any/if_all简化代码(更鲁棒)
如果你的数据存在NA值,或者想避免重复写变量名,推荐用tidyverse的if_any/if_all函数:
# 定义残疾变量列表 dis_vars <- c("DIFFCARE", "DIFFMOB", "DIFFEYE", "DIFFREM", "DIFFPHYS", "DIFFHEAR", "DIFFANY") bias <- bias %>% mutate( DISABLED = if_else(if_any(all_of(dis_vars), ~ .x == 2), 1, 0), NOTDISABLED = if_else(if_all(all_of(dis_vars), ~ .x == 1), 1, 0) )
关键逻辑说明
DISABLED:只要任意一个残疾变量取值为2(存在对应残疾),就标记为1;否则为0(但此时的0包含「部分变量为1、部分变量非1/NA」的情况,不是你要的纯非残疾)NOTDISABLED:仅当所有残疾变量取值都为1(无任何残疾)时,才标记为1;其余情况(有任何残疾、存在NA)都标记为0,完全匹配你的需求
额外提示
如果IPUMS的这些残疾变量仅存在1(无残疾)和2(有残疾)两种取值、且无NA,那NOTDISABLED也可以直接用1 - DISABLED生成——因为此时DISABLED为0的样本必然是所有变量都为1。但如果存在NA或其他取值,必须用if_all的写法来确保逻辑严谨。
内容的提问来源于stack exchange,提问作者Hlb09d
相关产品推荐
相关产品推荐

