Намиране на групи от съседни числа в списък

Това е дублиран въпрос на този, с изключение на R по-скоро отколкото Python.

Бих искал да идентифицирам групи от съседни (някои хора ги наричат ​​непрекъснати) цели числа в списък, където дублиращите се записи се третират като съществуващи в същия диапазон. Следователно:

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

се завръща:

min  max
2    5
12   17
20   20

Въпреки че всеки изходен формат би бил добър. Текущият ми brute-force, for-loop метод е доста бавен.

(Извинявам се, ако можех лесно да претълкувам отговора на 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