Разделить фрейм данных в список на основе идентичного последовательного элемента
Существует ли эффективный способ разбить фрейм данных на основе идентичного последовательного элемента в столбце в список (и сохранить порядок элемента фрейма в списке) следующим образом?
Фрейм данных:
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))