一个向量是由不同的向量创建的,我想在从它们创建的向量中找到这些向量的起始和结束位置

A vector is created from different vectors and i want to find starting and ending positions of these vectors in the vector created from them

这些向量将始终按递增顺序排列,例如 1 ..2 ... 3 ..4。他们不能减少。假设我有三个向量作为例子。

v1 <- c(1,3)
v2 <- c(2)
v3 <- c(1,3,4)

我有一个从这些向量创建的向量:

vsum <- c(v2, v1, v3)

现在我想创建一个代码,它可以找到每个向量 (v1,v2,v3) starts and ends 的位置在VSUM。在这种情况下,起始位置看起来像

start <- c(1,2,4)

因为如果我 运行 vsum 这些是每个向量的起始位置。

2 1 3 1 3 4

结束位置看起来像

end <- c(1,3,6)

因为这些是结束位置

2 1 3 1 3 4

您可以将向量包装在列表中并使用 lengthscumsum:

v1 <- c(1,3)
v2 <- c(2)
v3 <- c(1,3,4)
l = lengths(list(v2, v1, v3))
# [1] 1 2 3

start = cumsum(l) - l + 1
# [1] 1 2 4

end = cumsum(l)
# [1] 1 3 6