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

使用dplyr的across()检测多列中超出范围的值

解决方案

可以结合dplyr的if_any()和starts_with()函数实现需求,无需手动罗列列名,代码如下:

library(dplyr)

# 原始数据
data <- tibble(a = letters[1:4], b1 = 10:13, b2 = 10:13, 
               b3 = c(9, 4, 11, 10), b4 = c(50, 10:12))
# 重命名阈值变量,避免和R内置函数冲突
min_val <- 9
max_val <- 15

# 添加标记列
data <- data %>%
  mutate(is_unexpected = if_any(starts_with("b"), ~ .x < min_val | .x > max_val))

关键逻辑说明

  • starts_with("b"):自动匹配所有以b开头的列,替代手动罗列列名的繁琐写法。
  • if_any():检查每行中任意一个目标列是否满足条件(值小于min_val或大于max_val),只要有一列符合,该行的is_unexpected就标记为TRUE,否则为FALSE。
  • 把原变量名min/max改为min_val/max_val:避免和R内置的min()/max()函数重名引发错误。

运行结果

执行代码后,数据将新增标记列,结果如下:

data
# A tibble: 4 × 6
  a        b1    b2    b3    b4 is_unexpected
  <chr> <int> <int> <dbl> <dbl> <lgl>        
1 a        10    10     9    50 TRUE         
2 b        11    11     4    10 TRUE         
3 c        12    12    11    11 FALSE        
4 d        13    13    10    12 FALSE        

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:05:19