Вы хотите сгруппировать элементы в блоки последовательных целых чисел.
diff
может сказать вам, если два последовательных элемента находятся в одном блоке,
cumsum
может нумеровать блоки
и tapply
может извлечь первый и последний элемент каждого блока.
x <- c(1:50, 53, 89:120)
y <- tapply( x, c(0,cumsum(diff(x) != 1)), range )
# Format the result
y <- sapply(y, function(u)
if(u[1]==u[2]) u[1]
else paste(u,collapse=":")
)
paste(y, collapse=", ")