Разделить вектор по его последовательностям

Следующий вектор x содержит две последовательности 1:4 и 6:7 среди других несекретных цифр.

 x <- c(7, 1:4, 6:7, 9) 

Я хотел бы разделить x по его последовательностям, так что результатом будет список вроде следующего.

 # [[1]] # [1] 7 # # [[2]] # [1] 1 2 3 4 # # [[3]] # [1] 6 7 # # [[4]] # [1] 9 

Есть ли быстрый и простой способ сделать это?

я пробовал

 split(x, c(0, diff(x))) 

который приближается, но я не чувствую, что добавление 0 к разнесенному вектору – это правильный путь. Использование findInterval тоже не сработало.

 split(x, cumsum(c(TRUE, diff(x)!=1))) #$`1` #[1] 7 # #$`2` #[1] 1 2 3 4 # #$`3` #[1] 6 7 # #$`4` #[1] 9 

Просто для удовольствия вы можете использовать функцию seqle от Carl seqle из своего пакета cgwtools . (Это не будет так эффективно, как ответ Роланда).

 library(cgwtools) ## Here's what seqle does... ## It's like rle, but for sequences seqle(x) # Run Length Encoding # lengths: int [1:4] 1 4 2 1 # values : num [1:4] 7 1 6 9 y <- seqle(x) split(x, rep(seq_along(y$lengths), y$lengths)) # $`1` # [1] 7 # # $`2` # [1] 1 2 3 4 # # $`3` # [1] 6 7 # # $`4` # [1] 9 
  • R Ошибка в операторе x $ ed: $ недействительна для атомных векторов
  • R создать идентификатор внутри группы
  • Как преобразовать таблицу в кадр данных
  • Как сортировать буквы в строке?
  • Создать таблицу PDF
  • извлекать имена объектов из списка
  • Перечислить списки в R
  • R применяется с несколькими параметрами
  • Увеличение на 1 для каждого изменения в столбце
  • Как удалить несколько значений из вектора?
  • Определить все объекты данного classа для дальнейшей обработки
  • Давайте будем гением компьютера.