Rolling windows s kolem práh v R

0

Otázka

Mám datovém jako je tento:

day         device      delta
2021-01-01  A           1.3
2021-01-02  A           2.56
2021-01-03  A           -1.72
2021-01-04  A           4.09
2021-01-05  A           6.99
2021-01-06  A           3.23
2021-01-07  A           1.12
2021-01-08  A           4.56
2021-01-09  A           1.09
2021-01-10  A           2.14
2021-01-01  B           -0.76
2021-01-02  B           -1.78
2021-01-03  B           1.54
2021-01-04  B           1.93
2021-01-05  B           5.98
2021-01-06  B           2.49
2021-01-07  B           8.92
2021-01-08  B           8.08
2021-01-09  B           3.12
2021-01-10  B           1.88

Chtěl bych vědět, zda existuje efektivní způsob, jak zjistit, kolik je 7 dní (řádky) okna pro libovolné zařízení patří zvýšení delta hodnoty z prvního řádku v okně o více než 5 bodů?

Já bych také třeba do seznamu první delta hodnota pro každé okno a první zvýšená hodnota, která prochází 5 bod prahu.

Požadovaný výsledek by měl vypadat takhle:

window_start    window_end    device    delta_first    delta_first_threshold_pass   
2021-01-01      2021-01-07    A         1.3            6.99
2021-01-03      2021-01-09    A         -1.72          6.99
2021-01-01      2021-01-07    B         -0.76          5.98
2021-01-02      2021-01-08    B         -1.78          5.98
2021-01-03      2021-01-09    B         1.54           8.92
2021-01-04      2021-01-10    B         1.93           8.92

By něco takového bylo možné? Děkuji za jakékoliv návrhy!

dataframe dplyr r
2021-11-23 23:18:24
1

Nejlepší odpověď

5

Možná, že můžete použít rollapplyr z zoo balení?

Po seskupení podle devicemůžete určit max delta pro 5-denní/řádek okno. S align "levice" index je zarovnán doleva (zahrnuje následující dny po index data).

Pak, můžete filter řádky, kde rozdíl mezi max hodnota a delta je větší než tvůj práh 5.

library(zoo)
library(tidyverse)

df %>%
  group_by(device) %>%
  mutate(max = rollapplyr(delta, width = 5, FUN = max, align = "left", partial = T)) %>%
  filter(max - delta > 5)

Výstup

  day        device delta   max
  <chr>      <chr>  <dbl> <dbl>
1 2021-01-01 A       1.3   6.99
2 2021-01-03 A      -1.72  6.99
3 2021-01-01 B      -0.76  5.98
4 2021-01-02 B      -1.78  5.98
5 2021-01-03 B       1.54  8.92
6 2021-01-04 B       1.93  8.92
7 2021-01-06 B       2.49  8.92
2021-11-24 00:04:02

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................