如何解决重叠时间间隔内的总和数据
我正在尝试为一组以超前/滞后方式运行的过滤器创建汇总统计数据。
超前/滞后的简短描述:
当一个新的过滤器上线时,它被置于滞后位置,这意味着水在通过初级(又名铅)过滤器后通过它。当超前过滤器堵塞时,当前滞后过滤器移动到超前位置。总而言之,过滤器从滞后位置开始,然后撞到领先位置。
视觉上,你可以这样想象:
我需要做的是总结单个过滤器在线的整个时间,无论是在领先还是落后位置。
以下是示例数据:
structure(list(record_timestamp = structure(c(1608192000,1608192060,1608192120,1608192180,1608192240,1608192300,1608192360,1608192420,1608192480,1608192540,1608192600,1608192660,1608192720,1608192780,1608192840,1608192900,1608192960,1608193020,1608193080,1608193140,1608193200,1608193260,1608193320,1608193380,1608193440,1608193500,1608193560,1608193620,1608193680,1608193740,1608193800),class = c("POSIXct","POSIXt"),tzone = "UTC"),flow = c(20,20,15,10,10),lag_start = structure(c(1608192000,1608192000,1608193260),lead_start = c("#N/A","#N/A","12/17/2020 8:11","12/17/2020 8:21","12/17/2020 8:21")),class = c("spec_tbl_df","tbl_df","tbl","data.frame"),row.names = c(NA,-31L),spec = structure(list(cols = list(record_timestamp = structure(list(),class = c("collector_character","collector")),flow = structure(list(),class = c("collector_double",polish_start = structure(list(),lead_start = structure(list(),"collector"))),default = structure(list(),class = c("collector_guess",skip = 1),class = "col_spec"))
我的想法是“取消嵌套”它们并接受会有重复的时间戳,但每一行只会与一个过滤器相关联。关于如何实现这一点的任何想法?未嵌套的 DF 看起来像:
structure(list(record_timestamp = structure(c(1608192000,NA,NA),lead_start = structure(c(NA,filter_id = c(1,1,2,2)),-41L),filter_id = structure(list(),class = "col_spec"))
然而,我意识到这将使我正在处理的数据的大小增加一倍,这已经是几年的一分钟数据。因此,如果有一种方法可以在不加倍时间戳的情况下做到这一点,那将是首选。
最后,最终目标是有一个小的摘要 DF,如下所示:
Filter ID | Total Flow
----------------------------
1 | 370
2 | 250
... | ...
解决方法
感谢您提供更多信息。看来您可以group_by
独自度过lag_start
时间。然后,您可以计算处于该位置时的总 flow
(超前或滞后)。之后,您可以依次分配过滤器编号,则总过滤器flow
将是当前行和下一行的flow
之和。这是否给出了预期的结果?
df %>%
group_by(lag_start) %>%
summarise(flow_per_position = sum(flow)) %>%
mutate(filter_id = row_number(),total_filter_flow = flow_per_position + lead(flow_per_position,default = 0))
输出
lag_start flow_per_position filter_id total_filter_flow
<dttm> <dbl> <int> <dbl>
1 2020-12-17 08:00:00 220 1 370
2 2020-12-17 08:11:00 150 2 250
3 2020-12-17 08:21:00 100 3 100
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。