我有一个 R tibble,其中有一个时间列,格式如下:“2020-08-19 07:59:05 IDT” 我想创建一个附加列来实现一些聚合函数,但在时间范围内,例如我有一个附加列“金额”,我想创建一个附加列,为每行汇总前 10 秒的所有金额.
Time Amount. SumOverTime(10 sec)
1 2020-08-19 07:57:18 0. 0
2 2020-08-19 07:57:19 1. 1
3 2020-08-19 07:57:19 1. 2
4 2020-08-19 07:57:20 0. 2
5 2020-08-19 07:57:20 2. 4
6 2020-08-19 07:57:20 0. 4
7 2020-08-19 07:57:21 0. 4
8 2020-08-19 07:57:22 0. 4
9 2020-08-19 07:57:23 1. 5
10 2020-08-19 07:57:28 0. 5
11 2020-08-19 07:57:30 0. 3
12 2020-08-19 07:57:31 0. 1
13 2020-08-19 07:57:32 0. 1
感谢您的帮助!
最佳答案
使用{slider}
包
library(dplyr)
library(slider)
df %>%
count(Time, wt = Amount, name = "Amount") %>%
mutate(SumOverTime = slide_period_dbl(.x = df$Amount, .i = df$Time,
.period = "second", .before = 10,
.f = sum,
.complete = FALSE))
#> Time Amount SumOverTime
#> 1 2020-08-19 07:57:18 0 0
#> 2 2020-08-19 07:57:19 2 2
#> 3 2020-08-19 07:57:20 2 4
#> 4 2020-08-19 07:57:21 0 4
#> 5 2020-08-19 07:57:22 0 4
#> 6 2020-08-19 07:57:23 1 5
#> 7 2020-08-19 07:57:28 0 5
#> 8 2020-08-19 07:57:30 0 3
#> 9 2020-08-19 07:57:31 0 1
#> 10 2020-08-19 07:57:32 0 1
请注意,我们使用 count
随着时间的推移进行预聚合,因为同一秒内发生多个事件,否则问题似乎定义不明确,因此这与预期输出不同。
关于r - 时间范围内的 Dplyr 窗口函数而不是行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63519614/