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

R语言使用if_else基于双变量创建住房成本负担变量的异常问题

问题原因
  • 逻辑判断写反:你第二层if_else使用|判断OCPIP < 31 | GRPIP < 31,该规则的含义是只要两个变量任意一个小于31就返回"No",仅当两个变量同时≥31时才会返回"Yes",和你预期的「任意一个变量≥31就返回"Yes"」的逻辑完全相反。
  • 未处理原始缺失值:如果OCPIP、GRPIP本身存在NA值,OCPIP == 0 | GRPIP == 0的运算结果会返回NA,if_else遇到NA输入会直接返回NA,这是你所有记录都被判定为缺失的核心原因。
修正代码

推荐使用可读性更高的case_when实现:

df <- df %>%
  mutate(
    cost_burdened = case_when(
      # 原始变量为缺失/取值为0,统一标记为缺失
      is.na(OCPIP) | is.na(GRPIP) | OCPIP == 0 | GRPIP == 0 ~ NA_character_,
      # 任意一个变量>30标记为Yes
      OCPIP > 30 | GRPIP > 30 ~ "Yes",
      # 剩余两个变量均为1-30的记录标记为No
      .default = "No"
    )
  )

如果要保留嵌套if_else的写法,修正后代码如下:

df <- df %>%
  mutate(cost_burdened = if_else(
    is.na(OCPIP) | is.na(GRPIP) | OCPIP == 0 | GRPIP == 0,
    NA_character_,
    if_else(OCPIP > 30 | GRPIP > 30, "Yes", "No")
  ))

内容的提问来源于stack exchange,提问作者crb61

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:03