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

如何在validate包中构建取较大值的验证规则识别异常值

解决validate包中动态取最大值作为异常值左边界的问题

要实现cd_hr_Day1大于cd_hr_Day1_left与55中的较大值,核心是用R的pmax()函数——它能逐元素比较两个(或多个)向量,返回对应位置的最大值,完美适配每行数据动态取边界的需求。

修改验证规则

直接在原有的validator规则中,将cd_hr_Day1_left替换为pmax(cd_hr_Day1_left, 55)即可,修改后的规则如下:

test_rules <- validator( "cd_hr_Day1_outlier"= (cd_hr_Day1 > pmax(cd_hr_Day1_left, 55) & cd_hr_Day1 < cd_hr_Day1_right))

完整修改后代码

library(validate)
library(tidyverse)
library(dplyr)
library(gt)

study_id <- c(1,2,3,4,5)
cd_hr_Day1 <- c(80,NA,105,45,78)
cd_hr_Day1_left <- c(70,70,70,70,70)
cd_hr_Day1_right <- c(85,85,85,85,85)

baseline_df_test  <- data.frame(study_id, cd_hr_Day1, cd_hr_Day1_left, cd_hr_Day1_right) 

# 修改后的验证规则
test_rules <- validator( "cd_hr_Day1_outlier"= (cd_hr_Day1 > pmax(cd_hr_Day1_left, 55) & cd_hr_Day1 < cd_hr_Day1_right))

test_output <- confront(baseline_df_test, test_rules,key = "study_id")
summary(test_output)

test_dout <- as.data.frame(test_output)

test_missing_or_outlier_data <- test_dout %>%
  dplyr::filter(!value == TRUE) %>%
  dplyr::select(study_id,name) %>%
  dplyr::arrange(study_id)

test_missing_or_outlier_data %>% gt() 

效果说明

  • 对于测试数据中cd_hr_Day1_left=70的行,pmax(70,55)返回70,规则逻辑和原规则一致;
  • 如果某行cd_hr_Day1_left=50,pmax(50,55)会返回55,此时cd_hr_Day1需要大于55才算符合规则,自动启用更高的边界值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:21