You need to enable JavaScript to run this app. R中按列分组后在函数内计算气体相对浓度的代码实现
优惠活动
大模型
产品
解决方案
定价
更多

R中按列分组后在函数内计算气体相对浓度的代码实现

分组计算气体相对浓度的R代码实现方案

核心计算逻辑

严格匹配你提出的计算规则:

  • 拆分独立实验维度:按source(o/n)、activty(low/high)的组合切分实验组,每个组合内的计算完全独立
  • 组内基准计算:对每个实验组下sampling == "blank"的所有空白罐,计算x、y浓度的算术平均值,作为该组的空白基准浓度
  • 相对浓度计算:组内空白基准浓度 / 同组下每一条记录的x、y浓度,得到最终的相对浓度值,计算结果与你给出的x_pct、y_pct示例完全一致

方案1:dplyr向量化计算(最常用、可读性高)

这是R中日常数据处理最常用的实现方式,全流程无循环,向量化操作效率高,适配绝大多数数据规模:

library(dplyr)

df_result <- df %>%
  # 按实验条件分组
  group_by(source, activty) %>%
  mutate(
    # 计算当前组的空白平均浓度
    blank_avg_x = mean(x[sampling == "blank"]),
    blank_avg_y = mean(y[sampling == "blank"]),
    # 计算相对浓度,保留两位小数与示例精度匹配
    calc_x_pct = round(blank_avg_x / x, 2),
    calc_y_pct = round(blank_avg_y / y, 2)
  ) %>%
  ungroup()

方案2:data.table极速计算(适配大样本数据)

如果后续数据量达到十万行级别,data.table的内存效率和运行速度优势明显,代码更简洁:

library(data.table)

setDT(df)
df_result <- df[,
  `:=`(
    calc_x_pct = round(mean(x[sampling == "blank"]) / x, 2),
    calc_y_pct = round(mean(y[sampling == "blank"]) / y, 2)
  ),
  by = .(source, activty) # 按实验维度分组计算
]

结果验证说明

以source = "o"、activty = "low"实验组为例:

  • 该组两个空白罐的x浓度分别为34、34,均值为34;两个空白罐的y浓度分别为46、45,均值为45.5
  • 对应土壤罐的计算值:
    • jar1:x=21 → 34/21≈1.62,y=33 →45.5/33≈1.38,与示例的x_pct、y_pct完全匹配
    • jar4:x=19 →34/19≈1.79,y=34 →45.5/34≈1.34,与示例值完全一致
  • 计算得到的相对浓度值可直接用于表征土壤吸收强度:数值越高,代表土壤罐内剩余气体浓度越低,土壤对该气体的吸收量越大

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

相关产品推荐
方舟 Agent Plan

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

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