【发布时间】:2016-12-06 17:26:04
【问题描述】:
使用 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,见黑线。
我如何编写一个代码,通过排除它们来考虑浓度下降到虚线以下的时间。最终结果将是蓝色虚线以上所有时间的总持续时间。如下所示
【问题讨论】:
-
见
?rle。暂时忽略多个 id,比如说,x = sin(seq(-3*pi, 3*pi, 0.1))和计算r = rle(x > threshold),连续的TRUEs(即x > threshold)的开始和结束位置分别是s = cumsum(c(1, r$lengths))[r$values]和e = i + r$lengths[r$values] - 1。对time[e] - time[s]求和应该给出x > threshold的总时间。 -
@alexis_laz 您可以添加您的评论作为答案吗?这为我解决了问题,我会投票。认为您只有 1 个错字,当您定义
e时,i应该是s