Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我有一个向量
v <- c(2, 3, 5, 11, 3, 19, 20, 88, 20, 22)
当一个数字小于向量中它前面的数字时,我希望它们分开,例如
2, 3, 5, 11 3, 19, 20, 88 20, 22
我尝试了几种方法,但是,作为语言的新手,我找不到方法。我尝试用下一个元素减去每个元素并获得负数的索引,这给了我应该分割向量的索引,但我还没有找到如何使用split()从这些索引中获取结果。这是我最有成效的方法,尽管它似乎效率低下。
split()
有什么建议么?
这是一种方法:
> 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它来获取要拆分的“组”。
diff
diff(v) < 0
c(1, diff(v) < 0)
cumusm