1

假设我有一个向量

v <- c(2, 3, 5, 11, 3, 19, 20, 88, 20, 22)

当一个数字小于向量中它前面的数字时,我希望它们分开,例如

2, 3, 5, 11
3, 19, 20, 88
20, 22

我尝试了几种方法,但是,作为语言的新手,我找不到方法。我尝试用下一个元素减去每个元素并获得负数的索引,这给了我应该分割向量的索引,但我还没有找到如何使用split()从这些索引中获取结果。这是我最有成效的方法,尽管它似乎效率低下。

有什么建议么?

4

1 回答 1

5

这是一种方法:

> split(v, cumsum(c(1, diff(v) < 0)))
$`1`
[1]  2  3  5 11

$`2`
[1]  3 19 20 88

$`3`
[1] 20 22

从概念上讲,它类似于您所想到的。diff负责将每个元素减去下一个元素。diff(v) < 0创建一个逻辑向量。c(1, diff(v) < 0)将其转换为 1 和 0 的向量,我们可以使用cumusm它来获取要拆分的“组”。

于 2013-08-15T16:25:44.997 回答