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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:30:01