Разделить фрейм данных в список на основе идентичного последовательного элемента

Существует ли эффективный способ разбить фрейм данных на основе идентичного последовательного элемента в столбце в список (и сохранить порядок элемента фрейма в списке) следующим образом?

Фрейм данных:

X__1
S003
S003
S003
S006
S006
S011
S007
S007
S003
S003
S005
S006

В:

$`1`
S003
S003
S003

$`2`
S006
S006

$`3`
S011

$`4`
S007
S007

$`5`
S003
S003

$`6`
S005

$`7`
S006

Я пытался использовать: split(df, interaction(df$X__1)) но это создаст группы по категориям из моего списка следующим образом:

$`1`
S003
S003
S003
S003
S003

$`2`
S005

$`3`
S006
S006
S006

$`4`
S007
S007

$`6`
S011

Спасибо за помощь:)

2 ответа

Решение

Мы можем использовать rleid функция из data.table, чтобы разделить его, т.е.

split(df, data.table::rleid(df$X__1))

Другой способ заключается в использовании cumsum,

split(df, cumsum(c(1L, df$X__1[-nrow(df)] != df$X__1[-1])))

ДАННЫЕ

df <-
structure(list(X__1 = c("S003", "S003", "S003", "S006", "S006", 
"S011", "S007", "S007", "S003", "S003", "S005", "S006")), .Names = "X__1", class = "data.frame", row.names = c(NA, 
-12L))
Другие вопросы по тегам