基于相同的连续元素将数据帧拆分为列表

时间:2018-01-04 14:43:24

标签: r dataframe dplyr tidyr wrangle

是否有一种有效的方法可以将基于列中相同连续元素的数据框拆分为列表(并保持数据框元素在列表中的顺序),如下所示?

数据框:

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 个答案:

答案 0 :(得分:5)

我们可以使用data.table中的rleid函数来分割它,即

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

答案 1 :(得分:2)

另一种方法是使用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))