【发布时间】:2020-01-20 07:40:24
【问题描述】:
我有这个向量:
a = c(4,5,6,81,82,83)
我想要的结果如下:
b = c(1,2,3,4,5,6,78,79,80,81,82,83)
我的逻辑是:a 中有两个不同的序列(这可以使用length(which(diff(a)>1))+1 来检查)。它们中的每一个都必须从后面延伸到1:end_of_first_seq (end_of_first_seq = a[which(diff(a)>1))[1]) 的长度。因此,在这种情况下,每个序列的长度应该是6。因此,每个序列必须落后三步,所以4,5,6 变为1,2,3,4,5,6 并且81,82,83 变为78,79,80,81,82,83,同时它们都在同一个向量中。
有什么快速的方法吗? (这是一个简单的例子,序列的数量可以更高)。值得一提的是,所有“先前”序列的长度相同(在本例中为3),并且它们至少由两个值分隔(不会发生6,7,8,9,10,11 之类的情况)。我知道我可以通过循环来做到这一点,但速度是一个因素。
【问题讨论】:
-
所以每个序列的长度必须为 6,因为
length(1:end_of_first_sequence)是6。如果有一个长度超过 6 的序列怎么办。所以在这个例子中如果a = c(4,5,6,81,82,83,84,85,86,87)。 87会被删除吗? -
好问题,但正如我所写,所有“先前”序列的长度都相同。此外,两个“prev”序列由至少 2 个值分隔。我会将其添加到原始问题中。