【发布时间】:2017-01-25 15:14:00
【问题描述】:
这是一些示例数据:
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 上使用提到的包远程执行的一个。
【问题讨论】:
-
我正在计算当另一个事件开始时尚未结束的事件的数量。这是停电数据,所以这是说“当这次停电开始时,已经有 x 次停电尚未修复”。
标签: r sql-server-2016