【发布时间】:2020-01-19 20:29:35
【问题描述】:
我有大量数据,其中包括开始时间、停止时间和值。开始和停止时间因行而异,以 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)
}
【问题讨论】:
-
你可能可以在 data.table 中使用滚动连接,但我的使用有点生疏:/