【发布时间】:2020-07-30 01:38:03
【问题描述】:
假设我有一个向量:
vec <- c(3,0,1,3,0,1,0,1,2,3,0,0,1,3,1,3)
我想在每 3 之后获取第一次出现 1 的索引。所以,我想要的索引的输出是
3,6,13,15
我将如何在 R 中做到这一点?
【问题讨论】:
假设我有一个向量:
vec <- c(3,0,1,3,0,1,0,1,2,3,0,0,1,3,1,3)
我想在每 3 之后获取第一次出现 1 的索引。所以,我想要的索引的输出是
3,6,13,15
我将如何在 R 中做到这一点?
【问题讨论】:
一种方法是使用cumsum 来跟踪3s。
mat <- cbind(cumsum(vec==3), vec == 1)
which(!duplicated(mat) & mat[,2] & mat[,1] > 0)
[1] 3 6 13 15
【讨论】:
我们也可以使用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
【讨论】: