Я борюсь с условным объединением двух наборов данных, которые у меня есть.
Первый имеет следующую структуру
ID Trip number Time start Time Stop
1 1 2018-04-10 14:44:38 2018-04-10 14:44:38
1 2 2018-04-10 16:28:08 2018-04-10 16:46:17
2 1 2018-04-10 22:47:56 2018-04-10 23:26:24
Второй имеет такую
ID Status Time
1 a 2018-04-10 14:44:38
1 b 2018-04-10 16:28:08
2 c 2018-04-10 22:47:56
Я пытаюсь создать новый столбец для первого df1то, что содержит минимальное время для каждого идентификатора, найденного во втором df2, которое лежит в интервале между временем начала и окончания каждой поездки идентификатора.Также я добавил 900 сек для интервала, чтобы сделать его шире.
Пока мой код выглядит так:
try <- df1 %>%
group_by(ID, Trip.number) %>%
mutate(ifelse((df1$Time.Start - 900) >= df2$Time & (df1$Time.Stop + 900) <= df2$Time & df1$ID %in% df2$ID), df2$Time, 0)
В завершение выдается предупреждение (длина двух наборов данных различна)
Ошибка оценки: аргумент "нет "отсутствует, без по умолчанию.Кроме того: Предупреждающие сообщения:
1: In >=.default
(df1 $ Time.Start - 900, df2 $ Time): длинная длина объекта не кратна короткой длине объекта
2: In <=.default
(df1 $ Time.Start + 900, df2 $ Time): длинная длина объекта не кратна короткой длине объекта
Время преобразуется в POSIXct
Воспроизводимый пример
df1 <- data.table(ID = c(1,1,1,2,2,3,3,3,4,5,5,5),
Trip.number = c(1,2,3,1,2,1,2,3,1,1,2,3),
Time.start = as.POSIXct(c("2018-04-10 14:44:38", "2018-04-10 16:28:08",
"2018-04-10 17:31:54", "2018-04-10 13:29:33",
"2018-04-10 22:47:56", "2018-04-10 10:03:15",
"2018-04-10 18:00:23", "2018-04-10 19:56:04",
"2018-04-10 08:52:00", "2018-04-10 09:54:50",
"2018-04-10 14:51:04", "2018-04-10 18:34:01")),
Time.stop = as.POSIXct(c("2018-04-10 15:30:59","2018-04-10 16:46:17",
"2018-04-10 18:03:36", "2018-04-10 13:52:35",
"2018-04-10 23:26:24", "2018-04-10 10:39:23",
"2018-04-10 18:03:37", "2018-04-10 20:29:13",
"2018-04-10 09:05:08", "2018-04-10 10:31:54",
"2018-04-10 15:00:41", "2018-04-10 19:04:10")))
df2 <- data.table(ID=c(1,1,2,2,2,2,4,5,6,7,8,9),
Time = as.POSIXct(c("2018-04-10 18:34:01",
"2018-04-10 19:04:10",
"2018-04-10 12:07:35",
"2018-04-10 12:13:59",
"2018-04-10 11:06:00",
"2018-04-10 11:46:20",
"2018-04-10 18:56:51",
"2018-04-10 19:10:03",
"2018-04-10 09:06:06",
"2018-04-10 09:29:04",
"2018-04-10 18:04:47",
"2018-04-10 18:21:24")))
Заранее спасибо!