R中合并两个dummy变量为新变量时ifelse运算结果异常求助
问题原因分析
- 函数名拼写错误
生成physical_violence时你错误使用了iffelse,多写了一个f,正确的判断函数是ifelse,拼写错误会导致该列生成失败或返回全量NA,直接影响后续合并结果。 - 变量类型不匹配
你的代码逻辑是给两个暴力变量赋值1/0的数值,但table()输出结果显示两个变量的取值是yes/no,说明你后续将两个变量转为了字符型或因子型,此时合并逻辑中的physical_violence == 1、sexual_violence == 1判断永远为假,合并规则完全失效。 - 预期计算逻辑错误
你默认合并后的案例数是两个变量的yes数直接相加,但忽略了同时遭受两类暴力的重叠人群,这部分人群会被单独统计时计数两次,合并后仅计数一次,因此合并后的总案例数必然小于846+634=1480,你当前得到的875对应的重叠人数为846+634-875=605人,是符合逻辑的统计结果。 - 潜在NA值干扰
如果原始变量e03*、e04*存在NA值,|运算符遇到NA会返回NA,table()统计时默认忽略NA值,也会导致计数偏差。
修正方案
推荐使用dplyr的if_any函数简化多条件判断,同时统一变量类型,避免判断失误:
library(dplyr) # 生成两类暴力的dummy变量,自动处理多条件匹配 df <- df %>% mutate( # 取值为1代表是,0代表否,统一为数值型 physical_violence = as.integer(if_any(c(e03bidummy, e03cidummy, e03didummy, e03eidummy, e03fidummy, e03gidummy, e03hidummy, e03iidummy, e03jidummy), ~.x == 1)), sexual_violence = as.integer(if_any(c(e04aidummy, e04bidummy, e04cidummy, e04didummy), ~.x == 1)) ) # 合并变量,无需写ifelse,直接将逻辑运算结果转数值即可 df <- df %>% mutate( physical_sexual_violence = as.integer(physical_violence | sexual_violence) ) # 验证两类暴力的重叠人数,确认结果合理性 table(physical = df$physical_violence, sexual = df$sexual_violence)
内容的提问来源于stack exchange,提问作者Andressa TB
相关产品推荐
相关产品推荐

