Мы можем использовать seq_along
для циклического перебора индекса каждого элемента, а затем установить его подмножество и получить индекс max
, где значение в последний раз произошло.
c(NA, sapply(seq_along(A)[-1], function(x) max(which(A[1:(x-1)] == A[x]))))
#[1] NA 1 -Inf 3 2 4 6
Мы можем изменить -Inf
на NA
при необходимости в этом формате
inds <- c(NA, sapply(seq_along(A)[-1], function(x) max(which(A[1:(x-1)] == A[x]))))
inds[is.infinite(inds)] <- NA
inds
#[1] NA 1 NA 3 2 4 6
Приведенный выше метод выдает предупреждение, для удаления которого мы можем выполнить дополнительную проверку length
c(NA, sapply(seq_along(A)[-1], function(x) {
inds <- which(A[1:(x-1)] == A[x])
if (length(inds) > 0)
max(inds)
else
NA
}))
#[1] NA 1 NA 3 2 4 6