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

遍历数据框清洗含LOQ值的数据的实现方法咨询

处理含LOQ值的参数列:拆分数值与标记列的实现方案

准备示例数据

先构造一个和你场景匹配的数据集,包含日期、站点及带LOQ值的参数列:

library(tidyverse)

# 模拟原始数据集
raw_df <- tibble(
  Date = as.Date(c("2023-01-01", "2023-01-02", "2023-01-03", "2023-01-04")),
  Station = c("A", "B", "A", "B"),
  Fe = c("<5", "12.3", "<5", "8.9"),
  Cu = c("8.7", "<3", "10.1", "<3"),
  `N-tot` = c("25", "<10", "30", "22")
)

核心实现:用dplyr拆分参数列

通过across批量处理所有参数列,同时生成数值列和LOQ标记列,代码逻辑清晰且可扩展:

processed_df <- raw_df %>%
  mutate(
    # 对所有非Date/Station的列批量处理
    across(
      -c(Date, Station),
      list(
        # 提取数值:移除<符号后转数值型
        value = ~ as.numeric(gsub("<", "", .x)),
        # LOQ标记:判断是否包含<符号,返回布尔值
        loq = ~ str_detect(.x, "<")
      ),
      # 自动命名新列:原列名_函数名(如Fe_value、Fe_loq)
      .names = "{.col}_{.fn}"
    )
  ) %>%
  # 可选:删除原始参数列,只保留处理后的列
  select(-c(Fe, Cu, `N-tot`))

处理后的数据预览

print(processed_df)
# # A tibble: 4 × 8
#   Date       Station Fe_value Fe_loq Cu_value Cu_loq `N-tot_value` `N-tot_loq`
#   <date>     <chr>      <dbl> <lgl>     <dbl> <lgl>         <dbl> <lgl>      
# 1 2023-01-01 A              5 TRUE       8.7 FALSE            25 FALSE      
# 2 2023-01-02 B             12.3 FALSE     3 TRUE             10 TRUE       
# 3 2023-01-03 A              5 TRUE      10.1 FALSE            30 FALSE      
# 4 2023-01-04 B              8.9 FALSE     3 TRUE             22 FALSE      

扩展用法

  1. LOQ标记转可读标签(适合绘图):

    processed_df <- processed_df %>%
      mutate(
        across(ends_with("_loq"), 
               ~ factor(.x, levels = c(TRUE, FALSE), 
                       labels = c("低于LOQ", "高于LOQ")))
      )
    
  2. 绘图示例(用LOQ标记区分点样式):

    ggplot(processed_df, aes(x = Date, y = Fe_value, shape = Fe_loq, color = Fe_loq)) +
      geom_point(size = 3) +
      scale_shape_manual(values = c(1, 16)) +
      scale_color_manual(values = c("#ff4d4d", "#3399ff")) +
      labs(title = "Fe浓度随时间变化", y = "Fe含量", shape = "LOQ状态", color = "LOQ状态") +
      theme_minimal()
    
  3. 统计量计算(按站点分组统计):

    processed_df %>%
      group_by(Station) %>%
      summarise(
        Fe均值 = mean(Fe_value, na.rm = TRUE),
        Fe中位数 = median(Fe_value, na.rm = TRUE),
        Fe低于LOQ样本数 = sum(Fe_loq == "低于LOQ", na.rm = TRUE),
        总样本数 = n()
      )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:52:39