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

在R语言中计算多组数据的曲线下面积(AUC)

分组批量计算荧光值曲线下面积(AUC)

问题背景

我有7组测量20小时荧光值的数据,已完成曲线绘制,现需计算每组的曲线下面积(AUC)。数据子集如下:

Condition Hour N Fluorescence
0 J/cm2    0 2       1537.0
0 J/cm2    1 2       2343.0
0 J/cm2    2 2       1907.0
0 J/cm2    3 2       1632.5
0 J/cm2    4 2       2864.0
0 J/cm2    5 2       3518.5
TBHP       0 2      11231.5
TBHP       1 2      11144.0
TBHP       2 2      11068.5
TBHP       3 2      10881.5
TBHP       4 2      10662.0
TBHP       5 2      10530.0

目前使用zoo包的trapz函数只能计算整体AUC或逐个分组计算,希望批量得到如下格式的结果以便绘制柱状图:

Condition AUC
0 J/cm2    11274.25
TBHP       54636.75

解决方案

方法1:使用dplyr分组计算(常规数据量首选)

  1. 加载所需包:
library(zoo)
library(dplyr)
  1. 构造示例数据(若数据已读入可跳过此步):
df <- data.frame(
  Condition = c(rep("0 J/cm2", 6), rep("TBHP", 6)),
  Hour = rep(0:5, 2),
  N = rep(2, 12),
  Fluorescence = c(1537.0, 2343.0, 1907.0, 1632.5, 2864.0, 3518.5,
                   11231.5, 11144.0, 11068.5, 10881.5, 10662.0, 10530.0)
)
  1. 分组计算AUC:
auc_result <- df %>%
  group_by(Condition) %>%
  summarise(AUC = trapz(Hour, Fluorescence), .groups = "drop")
  1. 查看结果:
print(auc_result)

输出结果:

# A tibble: 2 × 2
  Condition     AUC
  <chr>       <dbl>
1 0 J/cm2    11274.
2 TBHP       54637.

方法2:使用data.table高效处理(大数据集首选)

如果数据量较大,data.table的分组计算效率更优:

  1. 加载包并转换数据格式:
library(zoo)
library(data.table)

setDT(df) # 将data.frame转换为data.table格式
  1. 分组计算AUC:
auc_result <- df[, .(AUC = trapz(Hour, Fluorescence)), by = Condition]
  1. 查看结果:
print(auc_result)

输出结果:

Condition     AUC
1:   0 J/cm2 11274.25
2:      TBHP 54636.75

注意事项

  • 确保每组数据的Hour列是按时间顺序排列的,trapz函数依赖有序的x轴数据才能得到正确结果。
  • 两种方法输出的结果格式完全符合需求,可直接用于后续柱状图绘制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:01:10