Образец воспроизводимых данных dput
Вывод:
structure(list(id = c(1, 1, 1, 2, 3, 3, 4),
start = structure(c(1546326000,
1546326060, 1546326270, 1546722600, 1546884300, 1546884720,
1547102430), tzone = "UTC", class = c("POSIXct", "POSIXt")),
event_time = structure(c(1546326059, 1546326059, 1546326059,
1546722930, 1546884480, 1546884480, NA),
tzone = "UTC", class = c("POSIXct", "POSIXt"))),
.Names = c("id", "start", "event_time"), row.names = c(NA, -7L),
class = "data.frame")
У меня есть некоторые грязные данные, которые были объединены из разных источников, и я пытаюсь создать новую логическую переменную, которая идентифицирует, какое наблюдение в группе (id
) имеет наименьшую положительную разницу во времени между start
и event_time
переменными , с желанием сделать это в пределах dplyr
.
Я пробовал несколько подходов, но не могу найти то, что работает.До сих пор я думаю создать новую переменную, которая вычисляет разницу во времени между event
и start
или принудительно устанавливает ее на NA
, если эта разница отрицательна, а затем создает желаемую переменную из этого.
Код:
dat %>% mutate(difference = ifelse(event_time > start,
event_time - start,
NA)) %>%
mutate(difference = as.integer(difference)) %>%
group_by(id) %>%
mutate(is_closest = row_number() == which.min(difference))
Это дает мне ошибку, которая не создает переменную is_closest
.
То, что я ищу в самом простомФорма:
- код для создания переменной, идентифицирующей ближайшее значение к некоторому другому эталонному значению (другой переменной или некоторому предоставленному количеству, включая в данном случае время) в группе наблюдений
- более разумный способ определить ближайшее время внутри группы