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

在R中统计数据框指标超标次数(含PH区间标准)

解决方案:PH超标次数统计及完整汇总方法

先还原你的数据框:

wqdata <- structure(list(SYS_LOC_CODE = c("RM-1", "RM-1", "RM-1", "RM-1", 
"RM-2", "RM-2", "RM-2", "RM-2", "RM-3", "RM-3", "RM-3", "RM-3", 
"RM-4", "RM-4", "RM-4", "RM-4"), CHEMICAL_NAME = c("NITRATE", 
"POTASSIUM", "PH", "TURB", "NITRATE", "POTASSIUM", "PH", "TURB", 
"NITRATE", "POTASSIUM", "PH", "TURB", "NITRATE", "POTASSIUM", 
"PH", "TURB"), REPORT_RESULT_VALUE = c(7, 9, 10, 4, 8, 3, 7, 
2, 7, 14, 7, 5, 9, 55, 4, 4), STANDARD = c("14", "10", "6.5-8", 
"2", "14", "10", "6.5-8", "2", "14", "10", "6.5-8", "2", "14", 
"10", "6.5-8", "2")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -16L))

步骤1:拆分PH的标准区间

先把PH的STANDARD字段拆分为下限和上限,其他分析物的上下限统一为原标准值:

library(dplyr)
library(tidyr)

wqdata_processed <- wqdata %>%
  separate(STANDARD, into = c("low", "high"), sep = "-", fill = "right", convert = TRUE) %>%
  mutate(
    high = ifelse(is.na(high), low, high),
    low = as.numeric(low),
    high = as.numeric(high)
  )

步骤2:定义超标判断规则

针对PH和其他分析物分别设置判断逻辑:

wqdata_processed <- wqdata_processed %>%
  mutate(
    is_exceed = case_when(
      CHEMICAL_NAME == "PH" ~ REPORT_RESULT_VALUE < low | REPORT_RESULT_VALUE > high,
      TRUE ~ REPORT_RESULT_VALUE > high
    )
  )

步骤3:汇总超标次数

按分析物分组统计超标次数:

exceed_summary <- wqdata_processed %>%
  group_by(CHEMICAL_NAME) %>%
  summarise(exceed_count = sum(is_exceed, na.rm = TRUE))

print(exceed_summary)

运行后输出结果:

# A tibble: 4 × 2
  CHEMICAL_NAME exceed_count
  <chr>                 <int>
1 NITRATE                   0
2 PH                        2
3 POTASSIUM                 2
4 TURB                      3

核心说明

  • 用separate处理PH的区间标准,通过fill = "right"让非PH数据的上下限统一,简化判断逻辑
  • PH的超标条件为结果小于区间下限或大于区间上限,其他分析物为结果超过标准值
  • sum(is_exceed)直接统计TRUE的数量,即超标次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:15:15