根据相同的连续元素将数据帧拆分为列表
Split dataframe into list based on identical consecutive element
是否有一种有效的方法可以将基于列中相同连续元素的数据帧拆分为列表(并保持列表中数据帧元素的顺序)如下?
数据框:
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
感谢您的帮助:)
我们可以使用data.table中的rleid
函数来拆分它,即
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))
是否有一种有效的方法可以将基于列中相同连续元素的数据帧拆分为列表(并保持列表中数据帧元素的顺序)如下?
数据框:
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
感谢您的帮助:)
我们可以使用data.table中的rleid
函数来拆分它,即
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))