У меня есть большой набор данных, который включает время начала, время остановки и значение.Время начала и окончания варьируется от строки к строке и с шагом 5 минут.Я пытаюсь создать новый фрейм данных с 5-минутным интервалом и суммой всех строк, где интервал находится в пределах начала и конца строки.
У меня есть скрипт, который работает, но он использует цикл for, который вычисляет сумму для каждой строки моего интервала данных.
Какой-нибудь совет, как сделать это быстрее и эффективнее?В настоящее время это может занять очень много времени.
Пример набора данных "data"
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)
}