【发布时间】:2020-12-28 05:13:08
【问题描述】:
我有以下tibble 叫test:
datetime volume
<dttm> <dbl>
2020-08-25 09:30:00.000 0
2020-08-25 09:30:12.000 107
2020-08-25 09:30:50.000 221
2020-08-25 09:30:50.000 132
2020-08-25 09:30:50.000 148
2020-08-25 09:30:50.000 100
2020-08-25 09:30:50.000 100
2020-08-25 09:30:58.000 100
2020-08-25 09:31:56.000 157
2020-08-25 09:32:36.000 288
2020-08-25 09:32:36.000 100
2020-08-25 09:33:10.000 235
2020-08-25 09:33:23.000 182
2020-08-25 09:33:44.000 218
2020-08-25 09:33:44.000 179
2020-08-25 09:34:18.000 318
2020-08-25 09:34:27.000 101
2020-08-25 09:34:27.000 157
2020-08-25 09:34:27.000 200
2020-08-25 09:34:27.000 114
当达到volume 的阈值时,我想计算累积时间差(甚至只是时间戳相同的行数)。一旦达到/超过阈值,我将计数器重置为 0,并从该点开始再次累积。
例如,如果我的threshold 是300,我从1 行累积到3 行,我会得到0+107+221=328,我现在会选择:
- 保留此行的时间戳,
- 计算行
1到行3的时间差, - 或计算行数直到达到阈值
以上任何一项都可以达到目的,最好的选择是保留时间戳。
下一步是重置计数器(目前保持在328)并从4行重新开始计数;从4 行到7 行我累积148+100+100=348,我会再次保留时间戳(例如)。然后我会再次重置计数器并继续前进。
我试图通过dplyr 或通常在tidyverse 中执行此操作,但是我无法提出合理的解决方案。我认为没有办法仅通过管道与 dplyr 一起完成此操作。
我想我可以通过for-loop 解决问题,但这是我最后的选择。对我来说困难的部分是重置计数器并重新开始计数。
【问题讨论】:
-
请添加您想要的输出。
-
@tmfmnk 抱歉,我无法真正想出理想的输出,因为我不确定最终输出是什么。更重要的是,我认为如果有替代方案会更容易解决,因为我认为这并不容易。我希望我的描述足够清楚,如果没有,请告诉我。