【发布时间】:2014-05-07 14:35:52
【问题描述】:
我有一个只有 1 行的 R 数据框,看起来像这样:
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
1 1 1 1 0 1 0 1 0 0
我想知道从第一个位置开始连续有多少个 1。所以这将是 4。
更多示例:
(示例 1)
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
0 1 1 1 0 1 0 1 0 0
会是 0,因为第一个位置甚至不是 1。
(示例 2)
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
1 0 1 1 0 1 0 1 0 0
应该是 1。
我该如何实现?
numInStreakAtBeginning = function(row) {
}
此外,我如何实现一个无论从哪里开始都查找最大条纹的方法?例如,
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
1 0 1 1 1 1 0 1 0 0
应该是 3。
【问题讨论】:
-
可能你想要
?rle。 -
对,但我如何指定 rle 必须从哪里开始以及它必须采用什么值。或者更进一步,它可以从任何地方开始,但必须具有一定的价值。
-
您可以从
rle的输出中推断出所有这些,这将计算所有值的所有运行。 -
第一个问题:
r <- rle(row) ; ifelse(r$values[1] == 1, r$lengths[1], 0)。第二个问题:r <- rle(row) ; max(r$lengths[r$values == 1]). -
@rbatt 从
rle输出到最终解决方案的命令很短(每个都是单行)且简单(ifelse并根据另一个向量的值索引一个向量)。鉴于使用rle输出回答问题的简单性,这对我来说似乎是重复的。