R - захват индекса первого появления значения после refre sh точки? - PullRequest
0 голосов
/ 16 апреля 2020

Допустим, у меня есть вектор:

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?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Один из подходов - использовать cumsum для отслеживания 3 с.

mat <- cbind(cumsum(vec==3), vec == 1)
which(!duplicated(mat) & mat[,2] & mat[,1] > 0)
[1]  3  6 13 15
0 голосов
/ 16 апреля 2020

Мы также можем использовать 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
...