首页 > 解决方案 > 基于序列其余部分的具有给定属性的元素的索引

问题描述

嘿,我有以下 0 和 1 的向量:

x = c(0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0)

我想从 1 的序列中找到第一个元素的索引,该索引的长度超过了每个后续的 0 字符串的长度。所以在我的例子中,解决方案应该是“10”,因为 x 的最后三个元素是:1, 1, 0所以序列 1 的长度,1 大于任何后续 0 字符串的长度。我怎么能在 R 中做到这一点?

标签: rindexing

解决方案


一种选择可能是:

which.max(with(rle(x), rep(values * (lengths > c(tail(lengths, - 1), 0)), lengths)))

不同 x 值的结果:

x <- c(0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0)

[1] 10

x <- c(0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0)

[1] 5

x <- c(1, 1, 0, 1, 1, 0)

[1] 1

然而,这假设至少有一个这样的序列。

对于没有满足条件的序列的情况:

ind <- with(rle(x), rep(values * (lengths > c(tail(lengths, - 1), NA)), lengths))
if(length(which(ind == 1)) == 0) NA else min(which(ind == 1))

推荐阅读