一个向量是由不同的向量创建的,我想在从它们创建的向量中找到这些向量的起始和结束位置
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
您可以将向量包装在列表中并使用 lengths
和 cumsum
:
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
这些向量将始终按递增顺序排列,例如 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
您可以将向量包装在列表中并使用 lengths
和 cumsum
:
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