找到较小的数字时拆分向量

时间:2013-08-15 16:22:35

标签: r vector split

假设我有一个向量

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

当数字小于矢量中的数字时,我希望它们分开,例如

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

我尝试了几种方法,但是,对于语言的新手,我找不到方法。我尝试通过下一个减去每个元素并得到负数的索引,这给了我应该拆分向量的索引,但我还没有找到如何使用split()从这些索引中获取结果。这是我最有成效的方法,虽然看起来效率很低。

有什么建议吗?

1 个答案:

答案 0 :(得分: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来获取要分割的“组”。