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

R语言使用dplyr筛选accident列仅负数中最接近0的值的问题

问题原因

原代码在正负值同时存在的分支中,未过滤正数就直接调用pmax计算,导致正数被纳入取值范围,得到错误结果。

修正方案

可以通过行内提取值、过滤非正数的逻辑实现需求,代码更简洁且完全匹配规则:

library(dplyr)

df %>%
  rowwise() %>%
  mutate(
    magic = {
      # 提取当前行三个accident列的所有值
      val_list = c(accident1, accident2, accident3)
      # 仅保留非NA、且小于等于0的值
      valid_neg = val_list[!is.na(val_list) & val_list <= 0]
      # 没有符合要求的值返回NA,否则返回最大值(即最接近0的负数)
      if (length(valid_neg) == 0) NA_real_ else max(valid_neg)
    }
  ) %>%
  ungroup()

逻辑说明

该写法不需要拆分多分支判断,天然覆盖所有规则:

  • 若所有值都是正数/全为NA:过滤后valid_neg长度为0,返回NA,匹配规则1、全NA场景
  • 若所有值都是负数:过滤后valid_neg包含所有值,取最大值,匹配规则2
  • 若同时存在正负值:过滤后valid_neg仅包含负数,取最大值,匹配规则3

运行后输出结果和你预期的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:01