【问题标题】:Calculate duration of time under threshold in r计算 r 中阈值以下的持续时间
【发布时间】:2021-08-28 16:07:33
【问题描述】:

我有一个包含 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个小时。 这是正确的方法吗?

【问题讨论】:

    标签: r dataframe data.table data-manipulation summary


    【解决方案1】:

    通过使用value &lt; 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空格的范围从07,确实是7

    我认为您需要以下两种解决方案之一:

    1. 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
      
    2. 包括value 的 1 个:

      df[ value <= 1, diff(range(time)), by = ID]
      

    【讨论】:

    • 谢谢。如何计算每个时间点值低于 1 的患者比例。在这种情况下,100% ID 在 1-8 小时内的值低于“1”。
    • df[, sum(value &lt; 1)/.N, by = time]
    • Ravua1992,如果答案解决了您的问题,请accept it。在这样做的同时,请考虑转到your previous questions 并接受他们每个人的回答。谢谢。
    • 谢谢 r2evans!这很有帮助。我无法对答案投票。
    • 我明白,但我建议接受它(和以前的问题),而不是赞成它。查看向上/向下投票箭头,您应该可以点击复选标记。
    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2016-12-06
    • 2020-06-01
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多