gpt4 book ai didi

r - 如何计算浓度多次超过阈值的总持续时间?

转载 作者:行者123 更新时间:2023-12-04 15:31:52 24 4
gpt4 key购买 nike

使用 R,我试图计算每个人的总持续时间,其中这个持续时间是花费在特定阈值之上的时间。

例如,在下面的图中,我有 3 个受试者 (ID) 的浓度数据,我想找到每个人在蓝色虚线上方花费的时间(x 轴)。数据集结构类似于:

head(dataset)
ID time CP
1 1 0.0 0.00000000
2 1 0.0 0.00000000
3 1 0.5 0.03759806
4 1 1.0 0.12523455
5 1 1.5 0.23483219
6 1 2.0 0.34820905

Solid lines represent the concentrations for 3 different subjects

我尝试使用以下代码:
library(data.table) 
TAbove<-setDT(dataset)[CP > .05, diff(range(time)), by = ID]

但是,这段代码计算从第一次上升到蓝色虚线上方到最后一次下降的持续时间。例如,对于绿线 ID,请参见黑线。

enter image description here

我如何编写一个代码,通过排除它们来考虑浓度下降到虚线以下的时间。最终结果将是蓝色虚线上方所有时间的总持续时间。像下面

enter image description here

最佳答案

我认为您的解决方案几乎是完美的,只需忽略 range .我在扩展数据集上尝试了以下操作(添加了一些条目)

> dat <- fread("ID time      CP
+ 1 0.0 0.00000000
+ 1 0.0 0.00000000
+ 1 0.5 0.03759806
+ 1 1.0 0.12523455
+ 1 1.5 0.23483219
+ 1 2.0 0.34820905
+ 1 3.0 0.5
+ 2 0.0 0.5
+ 2 0.5 0.01
+ 2 1.0 0.2")

结果如下:
> dat[CP > .05, diff(time), by = ID]
ID V1
1: 1 0.5
2: 1 0.5
3: 1 1.0
4: 2 1.0

编辑:使用原始数据集计算

使用原始数据集
dataset <- fread("ID time      CP
1 0.0 0.00000000
1 0.0 0.00000000
1 0.5 0.03759806
1 1.0 0.12523455
1 1.5 0.23483219
1 2.0 0.34820905")

我们得到以下结果:
> dataset[CP > .05, diff(time), by = ID]
ID V1
1: 1 0.5
2: 1 0.5

关于r - 如何计算浓度多次超过阈值的总持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com