【问题标题】:Counting the Number of Events Currently Elapsing When a New Event Occurs (RevoScaleR/mrsdeploy)计算发生新事件时当前经过的事件数 (RevoScaleR/mrsdeploy)
【发布时间】: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


【解决方案1】:

流程以升序开始和结束,并记录您看到的开始和结束的数量。如果您没有重复/虚假的结束事件,这将正常工作。

【讨论】:

  • 对不起,我不太清楚你的意思。
【解决方案2】:

这似乎用一个简单的sapply 来完成

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

要并行化它只需使用rxExecmclapplyparLapplyforeach 等。

【讨论】:

    【解决方案3】:

    我在 t-sql 中找到了一种方法,这是最快的方法。该信息位于此处:http://sqlmag.com/t-sql/intervals-and-counts-part-1

    对于将来这样做的任何人,它也可以轻松地翻译成 R。不过我选择在 t-sql 中完成操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2022-08-21
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多