首页 > 解决方案 > For循环计算R中曲线下的面积(无功能)

问题描述

我想知道如何使用原始数据集计算我在 Origin Pro 中绘制的图表下的面积(x 轴 = 以秒为单位的时间,y 轴 = CO2 浓度)。该图没有函数,所以我知道我不能使用 quad 或任何这些积分函数。

对于每张图,我需要计算 60-960 秒曲线下的总面积。

这是图表的一些坐标:

这是图表的一些坐标

除了找到 60-960 秒的曲线下面积外,我还想为我在另一个数据集中的一系列时间(x 轴值)找到同一曲线下的面积,例如:

第二个数据集:

第二个数据集

由于我有很多图表要查看,因此建议我使用 for 循环来执行此操作。我不是很懂R,所以任何关于如何以易于理解的方式自动化的建议将不胜感激!

如果我遗漏了任何信息,请告诉我。非常欢迎任何其他建议,我无法获得第一个建议的答案。

标签: rfor-loop

解决方案


这是简单的梯形求和规则:

AUC <- function (conc, time) 
{
    auc <- 0
    for (i in 2:(length(time))) {
        auc <- auc + (time[i] - time[i - 1]) * (conc[i] + conc[i - 1])/2
    }
auc
}

测试它:

sapply(by(data=Indometh, INDICES = Subject, 
          FUN = function(x) auc(conc=x$conc, time=x$time)), as.numeric)
      1       4       2       5       6       3 
1.55375 2.24625 2.67875 1.69750 2.58375 2.59375 

library(pracma)
sapply(by(data=Indometh, INDICES = Subject, 
          FUN = function(x) trapz(x=x$time, y=x$conc)), as.numeric)
      1       4       2       5       6       3 
1.55375 2.24625 2.67875 1.69750 2.58375 2.59375 

推荐阅读