Разделить вектор по его последовательностям
Следующий вектор 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
Есть ли быстрый и простой способ сделать это?
- Добавление нового столбца к каждому элементу в списке таблиц или фреймов данных
- Как увеличить количество столбцов с помощью R в Linux
- Не удалось установить пакеты в последней версии RStudio и R версии.3.1.1
- обнаружена ошибка segfault в R
- Почему некоторые символы Юникода отображаются в matrixх, но не в кадрах данных в R?
я пробовал
split(x, c(0, diff(x)))
который приближается, но я не чувствую, что добавление 0
к разнесенному вектору – это правильный путь. Использование findInterval
тоже не сработало.
- Настройка прокси для R
- Заменить значения NA по строкам
- листинг содержимого файла данных R без загрузки
- Преобразование десятичного в двоичный в R?
- Как удалить все объекты, кроме одного из рабочей области в R?
- Найти повторяющиеся значения в R
- Матрица корреляции сюжетов в граф
- Максимальная длина для вектора в R
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