我有这样的数据框:
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
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种有效的方法可以找出任何设备有多少个 7 天(行)窗口包括窗口中第一行的增量值增加超过 5 个点?
我还需要列出每个窗口的第一个增量值以及通过 5 点阈值的第一个增加值。
期望的结果如下所示:
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
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?感谢您的任何建议!
rollapplyr也许你可以从包中使用zoo?
分组依据 后device,您可以确定max5 天/行窗口的增量。使用align“left”时,索引左对齐(包括索引日期之后的后续日期)。
然后,您可以对值 和filter之间的差值大于阈值 5 的行进行排序。maxdelta
library(zoo)
library(tidyverse)
df %>%
group_by(device) %>%
mutate(max = rollapplyr(delta, width = 5, FUN = max, align = "left", partial = T)) %>%
filter(max - delta > 5)
Run Code Online (Sandbox Code Playgroud)
输出
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |