2016-12-30 75 views
1

开始下面是一些示例数据:如何计算事件数目前流逝当一个新事件,事件的BeginTime和结束时间

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 2

我需要这个编码在R请。我找到了一种方法来计算SAS的滞后函数,但我不喜欢这种方法的各种原因,并希望在R的工作更好的东西。

实际上,我有36,000行,这是处理停电。

有人问我发布我试过的东西,好吧。如我所说,在SAS中,我成功实现了滞后功能。该方法不能很好地工作,因为你必须硬编码一吨,效率不高。

在R我尝试按开始时间和从1-36k的数字进行排序,然后按1-36k的endtime和数字进行排序,然后尝试一些ifthen逻辑,但是碰到一堵墙,并且认为这也不会起作用。

我的问题被告知要编辑以便再次提供给社区。我能想象的唯一原因是因为有太多可能的答案。好吧,我没有编辑任何内容,但我添加了这个摘录。在编程中,对于任何“好”问题都会有很多答案,这并不是最简单的问题(但即使那些问题有很多答案,特别是在R中)。这个问题是我知道很多人会一直问,坦率地说,很难找到关于如何在R网上做到这一点的信息来源。这个问题的答案很短,而且完美。如果不能向社区提供这个问题将是一件令人遗憾的事情,因为stackoverflow的目的是为了获得一系列精彩的问题,所以基本上,当人们按照该问题行事时,他们的名字会被拉下来。

+4

请发表你迄今为止尝试过,并且我们可以帮助一些具体问题。否则,这看起来像'请为我写'我的代码'的问题,这将不会得到很好的回应。 –

+3

不要将您的数据作为图像发布,请学习如何给出[可重现的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610 ) – Jaap

+0

我说过我曾经试过并且与阿里成功,谢谢。对不起,你认为这看起来像是一个请写我的代码给我的问题,我希望其他人选择不要恶意回应它。我认为这只会说一些关于这个社区的事情,考虑到我认为它比其他许多人更难处理日期。我希望别人不要在提出问题之前证明自己的合理性。 – TravisLong

回答

0

也许这会有所帮助:

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][] 
# Begin     End N 
# 1: 2010-10-10 12:15:35 2010-10-10 12:24:23 0 
# 2: 2010-10-10 12:20:52 2010-10-10 12:23:30 1 
# 3: 2010-10-10 12:23:45 2010-10-10 12:45:15 1 
# 4: 2010-10-10 12:25:01 2010-10-10 12:32:11 1 
# 5: 2010-10-10 12:30:29 2010-10-10 12:45:05 2 
+0

谢谢!午餐后我会检查一下。看起来很有希望:)我欣赏它。 – TravisLong