мой фрейм данных выглядит следующим образом:
test <-
data.frame(
id = c(4, 6, 9, 12, 14, 15),
dates = seq(as.Date("2019-01-01"), as.Date("2019-01-06"), "days"),
staus = c("REGULAR", "PENDING", "ANOTHER", "PENDING", "PENDING", "PENDING TOO")
)
Я пытаюсь получить статус последний PENDING или PENDING TOO, но перед другой РЕГУЛЯРНОЙ / ДРУГОЙ датой для статуса REGULARили В ОЖИДАНИИ.
Другими словами, результат должен быть
result <-
data.frame(
id = c(4, 6, 9, 12, 14, 15),
dates = seq(as.Date("2019-01-01"), as.Date("2019-01-06"), "days"),
staus = c("REGULAR", "PENDING", "ANOTHER", "PENDING", "PENDING", "PENDING TOO"),
staus_summary = c("2019-01-02", NA, "2019-01-06", NA, NA, NA)
)
Вот то, что я создал, но у меня есть проблема с возможностью того, что не всегда желаемый статус только в следующей строке.
result <- test %>%
mutate(
status_summary = if_else(status %in% c("REGULAR", "ANOTHER") & lag(status) %in% c("PENDING", "PENDING TOO"), as.character(dates), NA_character_)
)