2017-01-25 7 views
1

Вот некоторые данные Примера:Подсчет числа событий В настоящее время проходящего Когда событие Происходит (RevoScaleR/mrsdeploy)

Begin = c("10-10-2010 12:15:35", "10-10-2010 12:20:52", "10-10-2010 12:23:45", "10-10-2010 12:25:01", "10-10-2010 12:30:29") 

End = c("10-10-2010 12:24:23", "10-10-2010 12:23:30", "10-10-2010 12:45:15", "10-10-2010 12:32:11", "10-10-2010 12:45:05") 

df = data.frame(Begin, End) 

Я хочу, чтобы подсчитать количество событий, которые в настоящее время не завершены, когда новое событие начинается и записывается в новый столбец. Таким образом, для этого конкретного примера конечным результатом является желаемый столбец со значениями: 0, 1, 1, 1, 2

У меня есть решение, как это сделать с data.table, и оно отлично работает. Я хотел бы найти решение, которое работает в пакетах RevoScaleR/mrsdeploy, чтобы программа, которая делает это, могла использовать преимущества параллельных вычислений/разбиения данных.

Вот решение, которое работает в data.table:

library(lubridate) 
library(data.table) 
df <- as.data.frame(lapply(df, dmy_hms)) 
dt <- as.data.table(df) 
setkey(dt,Begin,End)[,id:=.I] 
merge(dt, foverlaps(dt,dt)[id>i.id,.N,by="Begin,End"], all.x=T)[,id:=NULL][is.na(N),N:=0][] 

Опять же, я ищу ту, которая может быть выполнена удаленно на SQLSERVER2016 с пакетами упомянутых.

+0

Я подсчитываю количество событий, которые еще не закончились, когда начинается другой. Это данные об отключении электроэнергии, так что это говорит о том, что «когда этот перерыв в электропитании начался, уже было х количество отключений электроэнергии, которые еще не были отремонтированы». – TravisLong

ответ

0

Процесс начинается и заканчивается в порядке возрастания, а также подсчитывает, сколько начинается и заканчивается. Если у вас нет повторяющихся/ложных событий конца, это будет работать нормально.

+0

Простите, но я не совсем понимаю, что вы имеете в виду. – TravisLong

0

Это, кажется, сделать это с помощью простого sapply

sapply(df$Begin, function(x) sum((x < df$End) & (x > df$Begin))) 

Для распараллеливания это просто использовать rxExec, mclapply, parLapply, foreach и т.д.

0

Я нашел способ сделать это в T-SQL это был самый быстрый путь. Эта информация находится здесь: http://sqlmag.com/t-sql/intervals-and-counts-part-1

Он также может быть легко переведен на R для тех, кто делает это в будущем. Однако я решил завершить операцию в t-sql.