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

在dplyr的if_else中编写多个或条件出错,求排查与正确写法

问题分析与解决:构造事件距离判断变量ha

错误原因

你写的代码里存在运算符优先级问题:%in%的优先级高于算术运算符-,所以year-one%in%c(0,1,2)会被R解析为year - (one %in% c(0,1,2)),而非你预期的(year - one) %in% c(0,1,2)。

具体来说,one列的值都是2010,显然不在c(0,1,2)中,所以one %in% c(0,1,2)返回FALSE(R中逻辑值会转为0),最终表达式变成判断year - 0是否在c(0,1,2)里,完全偏离了“计算年份差”的需求,自然得不到预期结果。

解决方法

有两种可靠的修正方式:

方式1:给年份差表达式加括号

明确让R先计算年份差值,再判断是否属于目标范围:

df <- df %>%
  mutate(
    ha = if_else((year - one) %in% c(0,1,2) | (year - two) %in% c(0,1,2) | (year - three) %in% c(0,1,2), 1, 0)
  )

方式2:用绝对值差判断(更直观)

如果需求是“当前年份与事件年份的绝对距离≤2年”,可以直接用abs()函数,写法更清晰,也不会出现运算符优先级问题:

df <- df %>%
  mutate(
    ha = if_else(abs(year - one) <= 2 | abs(year - two) <= 2 | abs(year - three) <= 2, 1, 0)
  )

两种方式都能得到你预期的0 0 0 0 1 1 1 1 1 0结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:18:22