假设我有一个向量
v <- c(2, 3, 5, 11, 3, 19, 20, 88, 20, 22)
当数字小于矢量中的数字时,我希望它们分开,例如
2, 3, 5, 11
3, 19, 20, 88
20, 22
我尝试了几种方法,但是,对于语言的新手,我找不到方法。我尝试通过下一个减去每个元素并得到负数的索引,这给了我应该拆分向量的索引,但我还没有找到如何使用split()
从这些索引中获取结果。这是我最有成效的方法,虽然看起来效率很低。
有什么建议吗?
答案 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
来获取要分割的“组”。