以下是一些示例数据:
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
我需要在R中编码。我找到了一种在SAS中用滞后函数计算这个的方法,但由于各种原因我不喜欢这种方法,并希望在R中有更好的效果。
实际上我有36,000行,这是在处理断电问题。
有人让我发布我尝试过的内容。在SAS中,我说我成功了一个滞后函数。这种方法不能很好地工作,因为你必须硬编码,而且效率不高。
在R中,我尝试按照开始时间和数字从1-36k排序,然后按结束时间和数字从1-36k排序,然后尝试一些ifthen逻辑但是碰壁,不认为这也可以。
我的问题被告知要编辑,以便再次提供给社区。我能想象的唯一原因是因为答案太多了。好吧,我没有编辑任何内容,但我添加了这段摘录。在编程中,任何好的'都会有很多答案。问题不是最简单的问题(但即使是那些有很多答案,特别是在R中)。这个问题是我知道很多人会在整个时间内提出的问题,坦率地说,很难在R网上找到关于如何做到这一点的信息来源。这个问题的答案很短,而且效果很好。如果没有向社区提供这个问题,那将是一个耻辱,因为stackoverflow的目的是获得一系列重要问题,所以基本上他们的名字会在人们根据这个问题进行谷歌搜索时被提起。
答案 0 :(得分: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