Проблема: для данного атомарного вектора найти в векторе начальный и конечный индексы прогонов.
Пример вектора с пробегами:
x = rev(rep(6:10, 1:5))
# [1] 10 10 10 10 10 9 9 9 9 8 8 8 7 7 6
Вывод из rle()
:
rle(x)
# Run Length Encoding
# lengths: int [1:5] 5 4 3 2 1
# values : int [1:5] 10 9 8 7 6
Желаемый результат:
# start end
# 1 1 5
# 2 6 9
# 3 10 12
# 4 13 14
# 5 15 15
Базовый класс rle
, похоже, не предоставляет эту функциональность, но класс _ 6_ и функция _ 7_ делать. Однако, учитывая, насколько незначительна функциональность, придерживаться базового R кажется более разумным, чем установка и загрузка дополнительных пакетов.
Существуют примеры фрагментов кода (здесь, здесь и в SO), которые решают несколько иную проблему поиска начального и конечного индексов для прогонов, удовлетворяющих некоторому условию. Мне нужно было что-то более общее, которое могло бы выполняться в одну строку и не предполагало присвоения временных переменных или значений.
Отвечая на свой вопрос, потому что я был разочарован отсутствием результатов поиска. Надеюсь, это кому-нибудь поможет!