我有一个dataframe,其中一列是lubridate个时间间隔(反映了此时机器的运行状态).时间间隔从几分钟到几小时和几天,可以在一天中的任何时间发生.我现在想汇总在给定时间间隔内车厢运行的时间,例如每天、每小时等的运行时间.

从机器接收的数据经过处理后,看起来有点像下面的伪数据:

# Dummy interval data
interval_data <- c(interval(ymd_hm("2024-02-10 22:00"), ymd_hm("2024-02-11 08:00")),
               interval(ymd_hm("2024-02-12 15:30"), ymd_hm("2024-02-13 07:45")),
               interval(ymd_hm("2024-02-14 21:00"), ymd_hm("2024-02-16 06:30")))

现在,我想将此数据与预定义的时间间隔(例如小时或天)相交,并接收机器在每个给定时间间隔内运行的分钟数.我期望收到的输出如下所示,其中持续时间以分钟为单位:

days       duration
2024-02-10      120
2024-02-11      480
2024-02-12      510
2024-02-13      465
2024-02-14      180
2024-02-15     1440
2024-02-16      390

我曾try 生成所需的参考时间间隔,然后循环处理参考数据和虚拟数据之间的所有可能性;然而,输出结果错综复杂,我在汇总数据时遇到了困难.

推荐答案

library(tidyverse)

interval_data <- c(interval(ymd_hm("2024-02-10 22:00"), ymd_hm("2024-02-11 08:00")),
                   interval(ymd_hm("2024-02-12 15:30"), ymd_hm("2024-02-13 07:45")),
                   interval(ymd_hm("2024-02-14 21:00"), ymd_hm("2024-02-16 06:30")))

tibble(
  days = seq(date(min(int_start(interval_data))),
             date(max(int_end(interval_data))),
             by = "day")
) %>% 
  mutate(duration = map_dbl(days, ~ sum(as.duration(intersect(interval(.x, .x %m+% days(1)), interval_data)), na.rm = TRUE)) / 60)



# A tibble: 7 x 2
  days       duration
  <date>        <dbl>
1 2024-02-10     120.
2 2024-02-11     480 
3 2024-02-12     510.
4 2024-02-13     465 
5 2024-02-14     180.
6 2024-02-15    1440.
7 2024-02-16     390 

R相关问答推荐

高质量地将R格式的图表从Word中输出

如何替换R中数据集列中的各种字符串

单击 map 后,将坐标复制到剪贴板

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

在R中无法读入具有Readxl和lApply的数据集

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

在数组索引上复制矩阵时出错

可以替代与NSE一起使用的‘any_of()’吗?

R:用GGPLATE,如何在两个独立的变量中制作不同形状的散点图?

如何平滑或忽略R中变量的微小变化?

优化从每个面的栅格中提取值

有没有办法一次粘贴所有列

在不对R中的变量分组的情况下取两行的平均值

如何阻止围堵地理密度图?

如何预测原始数据集并将值添加到原始数据集中

R-使用stri_trans_General()将其音译为德语字母

分隔日期格式为2020年7月1日

将字符变量出现次数不相等的字符框整形为pivot_wider,而不删除重复名称或嵌套字符变量

对计算变量所有唯一值的变量进行变异

R:部分修改矩阵对角线的有效方法