【发布时间】:2018-05-29 19:44:33
【问题描述】:
我有以下两个数据框:
df <- data.frame(id = c("AED","AED","CFR","DRR","DRR","DRR","UN","PO"),
dates = as.POSIXct(c("2018-05-17 09:52:00","2018-05-17 10:49:00","2018-05-17 10:38:00","2018-05-17 11:29:00","2018-05-17 12:12:00","2018-05-17 13:20:00","2018-05-17 14:28:00","2018-05-17 15:59:00")))
events <- data.frame(id = c("AED","CFR","DRR","DRR","UN"),
start = as.POSIXct(c("2018-05-17 10:00:00","2018-05-17 10:18:00","2018-05-17 11:18:00","2018-05-17 13:10:00","2018-05-17 14:18:00")),
end = as.POSIXct(c("2018-05-17 11:56:00","2018-05-17 12:23:00","2018-05-17 12:01:00","2018-05-17 14:18:00",NA)))
通过唯一 id,我想将 df 中的每个日期与 events 数据框中列出的各个日期范围进行比较(事件数据框的每一行都被认为是自己的时间范围),以便得到以下结果:
result <- data.frame(id = c("AED","AED","CFR","DRR","DRR","DRR","UN","PO"),
dates = c("2018-05-17 09:52:00","2018-05-17 10:49:00","2018-05-17 10:38:00","2018-05-17 11:29:00","2018-05-17 12:12:00","2018-05-17 13:20:00","2018-05-17 14:28:00","2018-05-17 15:59:00"),
inRange = c(FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE),
outsideRange = c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE))
如果来自 df 的 id 不在事件中,则为 inRange 和 outsideRange 返回 FALSE;如果 df 日期大于 event$start,但 events$end 为 NA,则 inRange 应为 TRUE
我希望将解决方案应用于至少 500,000 行的更大数据集。
【问题讨论】:
-
你有这么多被放弃/未解决的问题。您可以接受这些问题的答案,以便对未来的用户有所帮助。