Поиск групп смежных чисел в списке

Это дублирующий вопрос к этому, за исключением R, а не чем Питон.

Я хотел бы идентифицировать группы смежных (некоторые люди называют их непрерывными) целых чисел в списке, где повторяющиеся записи рассматриваются как существующие в одном диапазоне. Следовательно:

myfunc(c(2, 3, 4, 4, 5, 12, 13, 14, 15, 16, 17, 17, 20))

возвращает:

min  max
2    5
12   17
20   20

Хотя подойдет любой выходной формат. Мой текущий метод грубой силы для цикла довольно медленный.

(Извините, если я мог легко переинтерпретировать ответ Python, и я глуп!)


person canary_in_the_data_mine    schedule 01.05.2013    source источник
comment
Я не нашел этот вопрос, когда я искал! Спасибо. Я пытаюсь понять, как отформатировать вывод этого другого ответа в запрошенном выше формате. Если я смогу понять это из другого ответа, я закрою этот вопрос. Спасибо.   -  person canary_in_the_data_mine    schedule 01.05.2013


Ответы (1)


Просто используйте diff:

x = c(2, 3, 4, 4, 5, 12, 13, 14, 15, 16, 17, 17, 20)

start = c(1, which(diff(x) != 1 & diff(x) != 0) + 1)
end = c(start - 1, length(x))

x[start]
# 2 12 20
x[end]
# 5 17 20
person eddi    schedule 01.05.2013
comment
Это очень близко! Забыл правильно описать свой вопрос в начальном вопросе: было бы здорово, если бы функция рассматривала повторяющиеся целые числа как существующие в одном диапазоне. Вопрос отредактирован сейчас, чтобы отразить это. Спасибо. - person canary_in_the_data_mine; 01.05.2013
comment
@canary_in_the_data_mine это легко исправить - см. правку - person eddi; 01.05.2013