data=data.frame("person"=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4),
"score"=c(1,2,3,2,2,1,2,3,2,3,1,4,1,4,3),
"WANT"=c(1,2,3,3,2,1,2,3,2,3,3,4,1,4,NA))
Для каждого человека мы отслеживаем его оценки, пока они не наберут «опытный» (3) или превосходство (4). Если человек набирает превосходство (4), то это значение сохраняется, а следующий человек снимается (см. Лицо 4; вместо NA, однако, просто хотел бы удалить этот ряд). Если человек набрал опытный (3), то это значение переносится вперед, ЕСЛИ МЕНЬШЕ не набирается 4, что заменило бы балл 3. В противном случае значения остаются такими же, как они. Я попробовал cummax func, но не уверен, как применить такое правило.
Это моя попытка ниже
data$want = ave(data$score, data$person, FUN = function(x) cummax(replace(x, is.na(x), -1)))