Используя dplyr
, мы можем group_by
ID
вычислить запаздывающее значение 1 и replace
, где Number_of_1_Obs == 1
с Date
, где Observation == 1
.
library(dplyr)
df %>%
group_by(ID) %>%
mutate(Number_of_1_Obs = lag(cumsum(Observation), default = 0),
Last_Observed_1 = ifelse(Number_of_1_Obs == 1, Date[Observation == 1], NA))
# Date ID Observation Number_of_1_Obs Last_Observed_1
# <chr> <int> <int> <dbl> <chr>
#1 10-01-2020 1 0 0 NA
#2 11-01-2020 2 0 0 NA
#3 12-01-2020 3 1 0 NA
#4 13-01-2020 1 1 0 NA
#5 14-01-2020 4 0 0 NA
#6 15-01-2020 3 0 1 12-01-2020
#7 16-01-2020 7 0 0 NA
#8 17-01-2020 4 1 0 NA
#9 18-01-2020 1 0 1 13-01-2020
данных
df <- structure(list(Date = c("10-01-2020", "11-01-2020", "12-01-2020",
"13-01-2020", "14-01-2020", "15-01-2020", "16-01-2020", "17-01-2020",
"18-01-2020"), ID = c(1L, 2L, 3L, 1L, 4L, 3L, 7L, 4L, 1L), Observation = c(0L,
0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L)), class = "data.frame", row.names = c(NA, -9L))