如何在R语言中基于IPUMS残疾变量生成合并的DISABLED二元变量
解决IPUMS数据生成DISABLED二元变量的问题
问题分析
你需要在现有数据集bias中新增DISABLED二元变量,规则是:当指定的残疾相关变量(DIFFCARE、DIFFMOB、DIFFEYE、DIFFREM、DIFFPHYS、DISABWRK、DIFFANY、DIFFHEAR)中**任意一个取值为2(Yes)**时,标记DISABLED=2,否则为1(No)。原代码存在语法错误、冗余操作等问题,以下是修正后的解决方案。
修正方案
方案1:使用dplyr::if_any(推荐,简洁高效)
适用于dplyr 1.0.0及以上版本,直接检查指定列是否满足条件:
# 在现有数据集上新增并赋值DISABLED变量 bias <- bias %>% mutate( DISABLED = ifelse( if_any(c(DIFFCARE, DIFFMOB, DIFFEYE, DIFFREM, DIFFPHYS, DISABWRK, DIFFANY, DIFFHEAR), ~ .x == 2), 2, # 任意变量为2时,DISABLED设为Yes 1 # 所有变量为1时,DISABLED设为No ) )
方案2:使用rowSums(兼容旧版dplyr)
通过计算每行中取值为2的变量数量,判断是否满足条件:
bias <- bias %>% mutate( DISABLED = ifelse( rowSums(cbind(DIFFCARE, DIFFMOB, DIFFEYE, DIFFREM, DIFFPHYS, DISABWRK, DIFFANY, DIFFHEAR) == 2, na.rm = TRUE) > 0, 2, 1 ) )
na.rm = TRUE用于忽略缺失值,避免缺失值导致判断错误。
原代码问题说明
- 冗余的
select操作:不需要先筛选列,直接在原数据集上修改即可,select会生成子集,导致后续无法保留原数据集的其他变量。 mutate语法错误:正确语法是mutate(新变量 = 表达式),原代码用逗号分隔变量名和表达式是错误的。- 变量名加引号:将变量名用引号包裹后,代码会把字符串和数字2比较,永远返回
FALSE,应该直接使用变量名。
内容的提问来源于stack exchange,提问作者Hlb09d
相关产品推荐
相关产品推荐

