在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分组计算(常规数据量首选)
- 加载所需包:
library(zoo) library(dplyr)
- 构造示例数据(若数据已读入可跳过此步):
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) )
- 分组计算AUC:
auc_result <- df %>% group_by(Condition) %>% summarise(AUC = trapz(Hour, Fluorescence), .groups = "drop")
- 查看结果:
print(auc_result)
输出结果:
# A tibble: 2 × 2 Condition AUC <chr> <dbl> 1 0 J/cm2 11274. 2 TBHP 54637.
方法2:使用data.table高效处理(大数据集首选)
如果数据量较大,data.table的分组计算效率更优:
- 加载包并转换数据格式:
library(zoo) library(data.table) setDT(df) # 将data.frame转换为data.table格式
- 分组计算AUC:
auc_result <- df[, .(AUC = trapz(Hour, Fluorescence)), by = Condition]
- 查看结果:
print(auc_result)
输出结果:
Condition AUC 1: 0 J/cm2 11274.25 2: TBHP 54636.75
注意事项
- 确保每组数据的
Hour列是按时间顺序排列的,trapz函数依赖有序的x轴数据才能得到正确结果。 - 两种方法输出的结果格式完全符合需求,可直接用于后续柱状图绘制。
内容的提问来源于stack exchange,提问作者Celina
相关产品推荐
相关产品推荐

