Я пытаюсь найти фильтр для идентификации идентификаторов для следующего кадра данных.
x <- data.frame("log_id" = c(16006,16006,16006,25109,25109,25109,25109,20506,20506),
"status" = c(0,1,1,0,1,1,1,0,1),
"version" = c(1,2,3,1,2,3,4,1,2),
"date_time" = c(as.Date("2018-10-27 00:00:00"), as.Date("2019-01-06 00:00:00"),as.Date("2019-01-16 00:00:00"),
as.Date("2018-10-27 00:00:00"), as.Date("2017-01-06 00:00:00"), as.Date("2019-02-17 00:00:00"),
as.Date("2018-10-27 00:00:00"), as.Date("2019-01-12 00:00:00"),as.Date("2019-02-12 00:00:00")))
Мне нужно идентифицировать идентификаторы так, чтобы date_time, связанный с более высокими номерами версий, после группировки по log_id должен был быть более поздним, чем предыдущие версии.
Другими словами, для каждого log_id записи с более высокой версией должны иметь datetime> =, чем предыдущие. Мне нужно найти log_id с событиями, которые не соответствуют этому условию, и записать определенный «log_id».
Я попробовал решение dplyr, основанное на group_by, и сделал с ifelse, но не смог получить правильный синтаксис.
solution <- x %>%
select(log_id,
status,
version,
date_time) %>%
group_by(log_id) %>%
{(ifelse(date_time[version== 1] < date_time[version!= 1], 0,1))} %>%
arrange(log_id)
Я ожидаю, что результаты будут храниться в векторе, чтобы идентифицировать все проблемные "log_id".
Для этого кадра данных ожидаемый результат:
"incidented log_id = " "25109"
Причина в том, что log_id = 25109 имеет значение date_time ("2017-01-06 00:00:00"), связанное с его версией = 2 старше, чем значение date_time ("2018-10-27 00:00: 00 ") связано с его версией = 1.