векторы с использованием условия на значениях прогона.
ема: По атомному вектору найдите начальный и конечный индексы прогонов в векторе.
Пример вектора с прогонами:
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
класс, кажется, не обеспечивает эту функциональность, но классRle
и функцияrle2
делать. Однако, учитывая незначительные функциональные возможности, придерживаться базы R кажется более разумным, чем установка и загрузка дополнительных пакетов.
Есть примеры фрагментов кода (Вот, Вот а такжена ТАК), которые решают немного другую проблему нахождения начальных и конечных индексов для прогонов, которые удовлетворяют некоторому условию. Я хотел что-то более общее, могло бы быть выполнено в одну строку и не включать в себя назначение временных переменных или значений.
Отвечая на мой собственный вопрос, потому что я был разочарован отсутствием результатов поиска. Надеюсь, это кому-нибудь поможет!