Ниже приведен пример таблицы, с которой я работаю.
df = data.frame(Test_ID = c('a1','a1','a1','a1','a1','a1','a1','a2','a2','a2','a2','a2','a2'),
Event_ID = c('Failure_x', 'Failure_x', 'Failure_y', 'Failure_y', 'Failure_x',
'Failure_x', 'Failure_y', 'Failure_x', 'Failure_y', 'Failure_y',
'Failure_x','Failure_x', 'Failure_y'),
Fail_Date = c('2018-10-10 17:52:20', '2018-10-11 17:02:16', '2018-10-14 12:52:20',
'2018-11-11 16:18:34', '2018-11-12 17:03:06', '2018-11-25 10:50:10',
'2018-12-01 10:28:50', '2018-09-12 19:02:08', '2018-09-20 11:32:25',
'2018-10-13 14:43:30', '2018-10-15 14:22:28', '2018-10-30 21:55:45',
'2018-11-17 11:53:35'))
Я хочу вычесть даты отказов (по Test_ID) только в том случае, если Failure_y возникает после Failure_x. Fail_Date для Event_ID Failure_y будет вычтено из Fail_Date для Event_ID Failure_x. Внутри группы у меня может быть несколько Failure_y. Второй Failure_y будет вычтен из Failure_x, возникшего после первого экземпляра Failure_y.
Я пытался использовать dplyr для создания столбца TIME_BETWEEN_FAILURES.
library(lubridate)
df$Fail_Date = as.POSIXct(as.character(as.factor(df$Fail_Date)),format="%Y-%m-%d %H:%M:%S")
df = df %>% group_by(Test_ID) %>%
mutate(TIME_BETWEEN_FAILURES = ifelse(Event_ID == "Failure_y" & lag(Event_ID) == "Failure_x",
difftime(Fail_Date, first(Fail_Date),units = "hours"),''))`
Мне удалось правильно создать Time_BETWEEN_FAILURES только для первого экземпляра, используя first () в dplyr. Вот где я сейчас застрял. Любая помощь в этом вопросе будет оценена.
Это результат приведенного выше фрагмента кода.
Выходные данные, необходимые для анализа.
Это идеальный ответ, необходимый для моего анализа.
Спасибо.
Приветствия.