[英]How to calculate the total time duration of concentration crossing a threshold multiple times?
[英]Calculate duration of time under threshold in r
我有一个包含 ID、时间、值的数据集。 我想计算每个主题的数据集中我的值保持在 1 以下的总时间。
library(data.table)
ID<-rep(1:10,each=10)
time<-rep(1:10,times=10)
value<-rep(c(0.001,0.01,0.05,0.07,0.09,0.096,0.1,0.5,1,2),10)
df<-cbind(ID,time,value)
df<-as.data.frame(df)
# #
df_sum<-setDT(df)[value < 1, diff(range(time)), by = .(ID)]
在这个数据集中,预期的答案是 8 小时。 我有7个小时。 这是正确的方法吗?
通过使用value < 1
,您将删除一个键行。
df[ID == 1, ]
# ID time value v t2
# <num> <num> <num> <num> <num>
# 1: 1 1 0.001 0.001 0
# 2: 1 2 0.010 0.011 1
# 3: 1 3 0.050 0.061 2
# 4: 1 4 0.070 0.131 3
# 5: 1 5 0.090 0.221 4
# 6: 1 6 0.096 0.317 5
# 7: 1 7 0.100 0.417 6
# 8: 1 8 0.500 0.917 7
# 9: 1 9 1.000 1.917 8
# 10: 1 10 2.000 3.917 9
df[ID == 1, ][value < 1, ]
# ID time value v t2
# <num> <num> <num> <num> <num>
# 1: 1 1 0.001 0.001 0
# 2: 1 2 0.010 0.011 1
# 3: 1 3 0.050 0.061 2
# 4: 1 4 0.070 0.131 3
# 5: 1 5 0.090 0.221 4
# 6: 1 6 0.096 0.317 5
# 7: 1 7 0.100 0.417 6
# 8: 1 8 0.500 0.917 7
其中time
空间的范围从0
到7
,实际上是7
。
我认为您需要以下两种解决方案之一:
diff(range(.))+1
,因为你想知道7-0+1=8
:
df[ value < 1, diff(range(time)) + 1, by = ID] # ID V1 # <num> <num> # 1: 1 8 # 2: 2 8 # 3: 3 8 # 4: 4 8 # 5: 5 8 # 6: 6 8 # 7: 7 8 # 8: 8 8 # 9: 9 8 # 10: 10 8
包括value
1:
df[ value <= 1, diff(range(time)), by = ID]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.