【问题标题】:Split dataframe into list based on identical consecutive element根据相同的连续元素将数据框拆分为列表
【发布时间】:2018-01-04 14:43:24
【问题描述】:

有没有一种有效的方法将基于列中相同连续元素的数据框拆分为列表(并保持列表中数据框元素的顺序)如下?

数据框:

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

感谢您的帮助:)

【问题讨论】:

  • 相关:Split vector into consecutive runs。尽管@akrun 的第一个替代方案专门处理数字向量,但最后两个替代方案也适用于非数字向量(如这里)。

标签: r dataframe dplyr tidyr wrangle


【解决方案1】:

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

split(df, data.table::rleid(df$X__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))
    

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2011-01-17
      • 2023-03-05
      相关资源
      最近更新 更多