r - 时间段 R 的条件总和

标签 r dplyr lubridate

我有大量数据,包括开始时间、停止时间和值。开始和停止时间因行而异,以 5 分钟为增量。我正在尝试创建一个新的数据框,该数据框具有 5 分钟的间隔以及该间隔在行的开始和停止范围内的所有行的总和。

我有一个有效的脚本,但它使用 for 循环来计算我的间隔数据帧的每一行的总和。

关于如何更快更有效地做到这一点的任何建议?目前它可能需要很长时间才能运行。

样本数据集
“数据”

start           stop           Volume
7/1/2013 0:00   7/1/2013 1:00   10
7/1/2013 0:15   7/1/2013 1:00   5
7/1/2013 0:30   7/1/2013 0:40   3
7/1/2013 0:50   7/1/2013 0:55   1

样本输出
名为“sum_mw”的数据框
IntervalStart   IntervalEnd     Sum_Volume
7/1/2013 0:00   7/1/2013 0:05   10.00 
7/1/2013 0:05   7/1/2013 0:10   10.00 
7/1/2013 0:10   7/1/2013 0:15   10.00 
7/1/2013 0:15   7/1/2013 0:20   15.00 
7/1/2013 0:20   7/1/2013 0:25   15.00 
7/1/2013 0:25   7/1/2013 0:30   15.00 
7/1/2013 0:30   7/1/2013 0:35   18.00 
7/1/2013 0:35   7/1/2013 0:40   18.00 
7/1/2013 0:40   7/1/2013 0:45   15.00 
7/1/2013 0:45   7/1/2013 0:50   15.00 
7/1/2013 0:50   7/1/2013 0:55   16.00 
7/1/2013 0:55   7/1/2013 1:00   15.00 

这是我正在使用的示例代码。
   library(lubridate)

    data$start<-mdy_hm(data$start,tz="UTC")
    data$stop<-mdy_hm(data$stop,tz="UTC")

    sum_mw$IntervalStart<-mdy_hm(sum_mw$IntervalStart,tz="UTC")
    sum_mw$IntervalEnd<-mdy_hm(sum_mw$IntervalEnd,tz="UTC")

    sum_mw$Sum_Volume<-0

    for (i in 1:nrow(sum_mw))
    {
    sum_mw$Sum_Volume[i] <- sum(data[data$start<=sum_mw$IntervalStart[i] & data$stop>=sum_mw$IntervalEnd[i],][,3],na.rm=T)
    }

最佳答案

这是 tidyverse 中的一个选项.将列转换为 DateTime 类后,使用 map2循环遍历相应的“开始”、“停止”值,得到 seq时代脉搏by 5 min ute 间隔,unnest list按“间隔”分组的列,得到 sum '音量'

library(tidyverse)
library(lubridate)
df1 %>% 
   mutate_at(1:2, mdy_hm) %>% 
   transmute(Interval = map2(start, stop, seq, by = '5 min'), Volume) %>% 
   unnest(Interval) %>% 
   group_by(Interval) %>% 
   summarise(Sum_Volume = sum(Volume))

数据
df1 <- structure(list(start = c("7/1/2013 0:00", "7/1/2013 0:15", "7/1/2013 0:30", 
"7/1/2013 0:50"), stop = c("7/1/2013 1:00", "7/1/2013 1:00", 
"7/1/2013 0:40", "7/1/2013 0:55"), Volume = c(10L, 5L, 3L, 1L
)), class = "data.frame", row.names = c(NA, -4L))

关于r - 时间段 R 的条件总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58000268/

相关文章:

r - 在 R 中使用 openxlsx 时避免 Excel 隐式交集运算符

R:以编程方式创建函数调用

r - 使用 R 中的 dplyr 完成数据框中缺失的一小时与 NA

r - Lubridate 获取某月某日的日期

r - 润滑mdy功能

r - 获取两个向量的唯一值保持两个原始的顺序

rChart nPlot - 更新 yAxis 标签

r - Shiny 的 selectInput 取决于验证的 react 性不会传递验证错误

r - 如何创建新列并通过 r 中的选定行添加列名

r - 在起点和终点之间过滤