У меня есть этот вектор:
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
, не может иметь место).Я знаю, что могу сделать это с помощью петель, но скорость - это фактор.