r - For循环计算R中曲线下的面积(无功能)
问题描述
我想知道如何使用原始数据集计算我在 Origin Pro 中绘制的图表下的面积(x 轴 = 以秒为单位的时间,y 轴 = CO2 浓度)。该图没有函数,所以我知道我不能使用 quad 或任何这些积分函数。
对于每张图,我需要计算 60-960 秒曲线下的总面积。
这是图表的一些坐标:
除了找到 60-960 秒的曲线下面积外,我还想为我在另一个数据集中的一系列时间(x 轴值)找到同一曲线下的面积,例如:
第二个数据集:
由于我有很多图表要查看,因此建议我使用 for 循环来执行此操作。我不是很懂R,所以任何关于如何以易于理解的方式自动化的建议将不胜感激!
如果我遗漏了任何信息,请告诉我。非常欢迎任何其他建议,我无法获得第一个建议的答案。
解决方案
这是简单的梯形求和规则:
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
推荐阅读
- ruby-on-rails - 我正在尝试在数字海洋中部署,当最后一部分到达 ActiveSupport::MessageEncryptor::InvalidMessage
- javascript - onunload 如何影响页面性能
- system-verilog - 参数化接口的合法语法
- sql - SQL - 使用子查询提取最近日期的记录时查询超时
- mysql - MySQL | 如何使用正则表达式显示列?
- r - ggplot2 中不同行的两个不同 scale_colour_gradient2()
- xml - python解析xml并获取root下每个子元素的属性值
- postgresql - POSTGRESQL:如何将表的最后一个 id 设置为序列的起始值
- php - Oauth 登录后将用户发送到 REQUEST_URI
- chef-infra - 刀客户端列表未能通过密钥 {key} 以厨师用户身份向 {server_url} 进行身份验证