Encontre posições iniciais e finais / índices de execuções / valores consecutivos
Problema: Dado um vetor atômico, encontre os índices de início e fim das execuções no vetor.
Vetor de exemplo com execuções:
x = rev(rep(6:10, 1:5))
# [1] 10 10 10 10 10 9 9 9 9 8 8 8 7 7 6
Saída derle()
:
rle(x)
# Run Length Encoding
# lengths: int [1:5] 5 4 3 2 1
# values : int [1:5] 10 9 8 7 6
Saída desejada:
# start end
# 1 1 5
# 2 6 9
# 3 10 12
# 4 13 14
# 5 15 15
A baserle
A classe não parece fornecer essa funcionalidade, mas a classeRle
e funçãorle2
Faz. No entanto, considerando a menor funcionalidade, a aderência à base R parece mais sensata do que instalar e carregar pacotes adicionais.
Existem exemplos de trechos de código (aqui, aqui eno SO), que resolvem o problema ligeiramente diferente de encontrar índices de início e de fim para execuções que satisfazem alguma condição. Eu queria algo que fosse mais geral, pudesse ser executado em uma linha e não envolvesse a atribuição de variáveis ou valores temporários.
Respondendo à minha própria pergunta porque fiquei frustrado com a falta de resultados de pesquisa. Espero que isso ajude alguém!