How to obtain a position of last non-zero element
Taking advantage of the fact that you have a binary vector, the following gives your desired output:
cummax(seq_along(event) * event)
Whenever you need to fill repetitions with a value, think run-length encoding.
In this case, you can determine the run lengths and then repeat the indices of count == 0
an according number of times:
lengths = rle(event == 0)$lengths
nonzeros = which(event != 0)
runs = c(0, rep(nonzeros, each = 2))
result = rep(runs, lengths)
Alternative, substitute the runs in the RLE and then inverse it:
rle = rle(event == 0)
nonzeros = which(event != 0)
rle$values = c(0, rep(nonzeros, each = 2))
result = inverse.rle(rle)