У меня есть 2 таблицы данных, и я хотел бы найти строки, которые перекрываются, используя foverlaps.Я думаю, что меня сбивают с толку, потому что у некоторых дат есть доли секунды.
library(data.table)
Сначала создайте таблицу данных времен смены
On <- as.POSIXct(c("2017-08-01 00:05:54", "2017-08-01 00:07:20", "2017-08-01 00:21:53"), format = "%Y-%m-%d %H:%M:%S", tz = "UTC")
Off <- as.POSIXct(c("2017-08-01 00:05:54", "2017-08-01 00:07:20", "2017-08-01 00:21:53"), format = "%Y-%m-%d %H:%M:%S", tz = "UTC")
shifts <- data.table(On, Off)
Теперь создайте таблицу данных времен наблюдений. Первая группа наблюдений получена из Matlab, поэтому ее необходимо преобразовать вPOSIXct первым.В итоге они дают мне доли секунды
timestamp <- c(736908.0041, 736908.0051, 736908.009, 736908.012, 736908.0152)
Obs = data.table(SightingTime = as.POSIXct((timestamp-719529)*86400, origin = "1970-01-01", tz = "UTC"))
#add a variable for the "date type"
Obs$DateType = "Long"
Добавить строку в таблицу данных, которая не имеет доли секунды (для целей данного примера)
Obs <- rbind(Obs, data.table(SightingTime=as.POSIXct("2017-08-01 00:05:54", format = "%Y-%m-%d %H:%M:%S", tz = "UTC"), DateType = "Short"))
создать интервалы между точками, чтобыможно использовать foverlaps
Obs[, SightingTime2 := SightingTime]
подготовиться к foverlaps
setkey(Obs, SightingTime, SightingTime2)
setkey(shifts, On, Off)
сделать соединение перекрытия
Obs.ov <- foverlaps(shifts, Obs ,type="any",nomatch=0L)
В результате Obs.ov будет иметь одну строку -перекрывается с «коротким» форматом даты.Строки с длинным форматом даты не включаются в перекрытие.Я ожидал бы, что три строки будут перекрываться (предполагая, что дробные секунды будут округлены, я бы также ожидал перекрытия с метками времени 00:05:54 и 00:21:53 "Long".
Я думаю, что это может быть связано с долями секунды в датах, которые я конвертировал из Matlab, но я не знаю, как избавиться от дробного бита. Я попытался использовать
attributes(Obs$SightingTime)$format <- "%Y-%m-%d %H:%M:%OS"
, а также включитьаргумент "format", когда переменная SightingTime была создана из переменной "timestamp" на ранней стадии. Но мне не повезло ни с одним из них.
Я посмотрел здесь Как отформатировать дробные секунды в POSIXct в r, но не могу понять, какие изменения мне нужно сделать, основываясь на этом.