Я хотел бы выбрать наблюдения в таблице данных, которые попадают в интервалы времени, указанные во второй таблице данных - интервалы - это периоды времени, когда наблюдения производятся одновременно с 2 платформ.
Первая таблица данных выглядит примерно так. Это куча наблюдений животных.
obs = data.table(sighting = as.POSIXct(c("2018-08-12 16:30:00", "2018-08-12 16:35:00", "2018-08-12 16:38:00", "2107-08-13 15:13:00", "2107-08-13 16:13:00", "2017-08-14 11:12:13"), format = "%Y-%m-%d %H:%M:%OS", tz = "America/Halifax"), encounter = c("1", "1", "1", "2", "3", "4"), what = c("frog", "frog", "toad", "bird", "goat","bird"))
Наблюдения проводились с 2 платформ.
platformA = data.table(station = "A", on.effort = as.POSIXct(c("2018-08-12 16:00:00", "2018-08-12 17:35:00","2017-08-14 11:00:13", "2018-08-15 17:35:00"), format = "%Y-%m-%d %H:%M:%OS", tz = "America/Halifax"), off.effort = as.POSIXct(c("2018-08-12 16:36:00", "2018-08-12 18:35:00","2017-08-14 12:12:13", "2018-08-15 18:35:00"), format = "%Y-%m-%d %H:%M:%OS", tz = "America/Halifax"))
platformB = data.table(station = "B", on.effort = as.POSIXct(c("2018-08-12 16:15:00", "2018-08-12 17:40:00", "2018-08-13 17:40:00","2017-08-14 11:05:13"), format = "%Y-%m-%d %H:%M:%OS", tz = "America/Halifax"), off.effort = as.POSIXct(c("2018-08-12 16:40:00", "2018-08-13 17:45:00", "2018-08-12 18:20:00","2017-08-14 12:30:13"), format = "%Y-%m-%d %H:%M:%OS", tz = "America/Halifax"))
Сначала я рассчитал интервалы для каждой платформы, а затем пересек интервалы, чтобы выяснить, когда наблюдения проводились одновременно.
setkey(platformA, on.effort, off.effort)
setkey(platformB, on.effort, off.effort)
common = foverlaps(platformA, platformB,type="any",nomatch=0)
common$x = intersect(interval(common$on.effort, common$off.effort),
interval(common$i.on.effort, common$i.off.effort))
Я хотел бы в итоге получить таблицу, которая является подмножеством "obs" и содержит только строки, покрытые интервалами в "общем $ x". Я надеялся использовать foverlaps, чтобы найти строки в пересекающихся интервалах, и создал "точечные" интервалы для моих наблюдений с помощью
obs[, sighting2 := sighting]
Но foverlaps хочет, чтобы "начало" и "конец" каждого интервала были в отдельных столбцах, а это не то, как интервалы хранятся в общих $ x.
Я бы хотел, чтобы мой вывод выглядел следующим образом
sighting encounter what
2018-08-12 16:30:00 1 frog
2018-08-12 16:35:00 1 frog
2017-08-14 11:12:13 4 bird
Буду признателен за любые советы. Возможно, я мог бы быть более эффективным раньше?
Благодаря.