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

R语言如何基于QC表自动过滤多列指定时间范围的故障数据

水槽数据自动化QC处理方案

前置数据预处理

首先统一处理时间格式,避免时间比较出错:

library(tidyverse)
library(lubridate)

# 转换QC表的时间格式
QC_table <- QC_table %>%
  mutate(
    date_time_start = ymd_hm(date_time_start),
    date_time_end = ymd_hm(date_time_end)
  )

# 转换原数据的时间格式
df <- dataframe %>%
  mutate(Measurement.time = ymd_hm(Measurement.time))

自动化QC核心逻辑

采用宽表转长表关联QC规则,再转回宽表的思路,无需手动遍历每个水槽/时间段,自动适配所有QC规则:

df_qc <- df %>%
  # 宽表转长表,把所有水槽指标列拆成行
  pivot_longer(
    cols = -c(Measurement.time, Trial),
    names_to = "col_full_name",
    values_to = "value"
  ) %>%
  # 提取列名前缀,和QC表的data_type_tank匹配(去掉末尾的_Avg/_Std后缀)
  mutate(
    data_type_tank = str_remove(col_full_name, "(_Avg|_Std)$")
  ) %>%
  # 关联QC表的规则
  left_join(
    QC_table %>% select(trial, data_type_tank, date_time_start, date_time_end),
    by = c("Trial" = "trial", "data_type_tank")
  ) %>%
  # 符合故障时间范围的数值替换为NA
  mutate(
    value = if_else(
      Measurement.time >= date_time_start & Measurement.time <= date_time_end,
      NA_character_,
      value
    )
  ) %>%
  # 清理不需要的列,转回宽表
  select(Measurement.time, Trial, col_full_name, value) %>%
  pivot_wider(
    names_from = col_full_name,
    values_from = value
  )

方案优势

  • 全自动化:不管QC表新增多少条故障规则、多少个水槽/数据类型,代码无需修改,直接运行即可
  • 效率更高:基于向量化运算,比手动循环/逐行subset效率高很多,适合大体积时序数据
  • 完全符合预期输出:仅将故障时间段的对应指标列置为NA,保留所有时间行和其他水槽的有效数据,和你给出的示例输出结构完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:03