【问题标题】:Calculating the frequency of a TRUE event in a 24 hour period (R)计算 24 小时内 TRUE 事件的频率 (R)
【发布时间】:2018-04-03 22:26:33
【问题描述】:

我有一个数据集如下:

   YEAR  STATION     DAT                 AbovePeak cumSum
  <chr> <fct>       <dttm>              <lgl>      <int>
 1 1993  COOP:047821 1993-01-01 01:00:00 FALSE          0
 2 1993  COOP:047821 1993-01-01 06:00:00 FALSE          0
 3 1993  COOP:047821 1993-01-01 07:00:00 TRUE           1
 4 1993  COOP:047821 1993-01-01 08:00:00 FALSE          1
 5 1993  COOP:047821 1993-01-01 09:00:00 FALSE          1
 6 1993  COOP:047821 1993-01-01 10:00:00 FALSE          1
 7 1993  COOP:047821 1993-01-01 11:00:00 FALSE          1
 8 1993  COOP:047821 1993-01-01 13:00:00 FALSE          1
 9 1993  COOP:047821 1993-01-06 03:00:00 FALSE          1
10 1993  COOP:047821 1993-01-06 07:00:00 FALSE          1

使用之前的函数,我创建了 AbovePeak 列来指示某个值是高于还是低于预设的峰值。 但是,现在我希望在 24 小时窗口内计算 TRUE 事件的频率。然后我将在&gt;= 1 TRUE Event 中使用这个合格天数,并将其除以测量的总天数。理想情况下,我会将其按YEAR 分组,例如:

 YEAR  numAbove percAbove numBelow percBelow cumPerc
<chr>    <int>     <dbl>    <int>     <dbl>   <dbl>
1 1993         4    0.0808     4944     0.919  0.0808
2 1994         0    0.         4948     1.00   0.0808
3 1995         0    0.         4948     1.00   0.0808
4 1996         3    0.0606     4945     0.939  0.141 
5 1997         1    0.0202     4947     0.980  0.162 

【问题讨论】:

    标签: r events time frequency


    【解决方案1】:

    如果您将 24 小时窗口表示为单个日历日,则使用 dplyr() 可能很容易获得解决方案,例如像这样

    library("dplyr")
    library("lubridate")
    # group by days & calculate a number of threshold exceedance for each day
    res_by_days <- x %>% group_by(YEAR, as_date(DAT)) %>% summarise(DayAbovePeak = any(AbovePeak),
        numBelowDaily = sum(!AbovePeak)) 
    

    添加了numBelowDaily 列以进一步计算每年的测量次数导致低于阈值的结果。如果我正确理解您的想法,则应将此值写入按年份分组的最终结果的numBelow 列:

    # group by years & calculate yearly values
    res_by_years <- res_by_days %>% group_by(YEAR) %>% summarise(percAbove = sum(DayAbovePeak)/n(),
            numBelow = sum(numBelowDaily), percBelow = 1 - sum(DayAbovePeak)/n())
    # calculate a cumulative percentage in a separate column
    res <- res_by_years %>% mutate(cumPerc = cumsum(percAbove))
    

    【讨论】:

      猜你喜欢
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2017-05-12
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      相关资源
      最近更新 更多