Допустим, у меня есть вектор:
vec <- c(3,0,1,3,0,1,0,1,2,3,0,0,1,3,1,3)
Я хочу получить индекс первого вхождения 1 после каждых 3. Итак, выходные данные индексов, которые мне нужны, равны
3,6,13,15
Как бы я это сделал в R?
Один из подходов - использовать cumsum для отслеживания 3 с.
cumsum
mat <- cbind(cumsum(vec==3), vec == 1) which(!duplicated(mat) & mat[,2] & mat[,1] > 0) [1] 3 6 13 15
Мы также можем использовать rleid
rleid
library(data.table) na.omit(as.vector(tapply(seq_along(vec) * (vec== 1), rleid(vec == 3), FUN = function(x)x[x > 0][1]))) #[1] 3 6 13 15