提问人:Ravua1992 提问时间:6/12/2021 最后编辑:James ZRavua1992 更新时间:6/12/2021 访问量:199
计算阈值以下的持续时间,单位为 r
Calculate duration of time under threshold in r
问:
我有一个包含 ID、时间、值的数据集。我想计算每个主题的数据集中 my 值保持在 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 个小时。 这是正确的方法吗?
答:
2赞
r2evans
6/12/2021
#1
通过使用 ,您将删除一个键行。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
包括 1:
value
df[ value <= 1, diff(range(time)), by = ID]
评论
0赞
Ravua1992
6/12/2021
谢谢。如何计算每个时间点值低于 1 的患者比例。在这种情况下,100% ID 的值在 1-8 小时内低于“1”。
0赞
r2evans
6/12/2021
df[, sum(value < 1)/.N, by = time]
0赞
Ravua1992
6/14/2021
谢谢r2evans!这是非常有帮助的。我无法对答案投赞成票。
0赞
r2evans
6/14/2021
我理解,但我建议接受它(和之前的问题),而不是投票。在向上/向下投票箭头下查看,您应该能够单击复选标记。
0赞
r2evans
6/14/2021
(现在你也应该能够投赞成票了。
评论