2013-08-29 4 views
1

Если у меня есть числовой вектор [1 2 3 4 7 8 9 10 15 16 17], как я могу разбить его так, чтобы у меня появилось несколько векторов, которые разделяют непрерывные элементы этот вектор? То есть [1 2 3 4] [7 8 9 10] [15 16 17]. Я нашел ответ, как это сделать в Matlab, но я использую только R.Разделите числовой вектор на непрерывные куски в R

Спасибо.

+0

Некоторые альтернативы здесь: http://stackoverflow.com/questions/8400901/detect- интервалы последовательных целых чисел – Henrik

ответ

5

Вот еще одна альтернатива:

vec <- c(1, 2, 3, 4, 7, 8, 9, 10, 15, 16, 17) 
split(vec, cumsum(seq_along(vec) %in% (which(diff(vec)>1)+1))) 
# $`0` 
# [1] 1 2 3 4 
# 
# $`1` 
# [1] 7 8 9 10 
# 
# $`2` 
# [1] 15 16 17 
+0

Этот ответ неверен из того, что показал OP. Но, увидев, что ОП принял этот ответ, вы, кажется, прочитали его мысли! ;) – Arun

+0

@Arun, отлично, не знаю, как я набил это ... исправил сейчас! – alexwhan

+0

Извинения. Я был счастливым здесь. Я думал, что это правильное решение, но, как указывает Арун, это не совсем то, о чем я просил. Спасибо, в любом случае! – user2728808

0

Другой вариант:

split(vec, cummax(c(1,diff(vec)))) 

Результат

$`1` 
[1] 1 2 3 4 

$`3` 
[1] 7 8 9 10 

$`5` 
[1] 15 16 17 
Смежные вопросы