按列拆分data.frame,将非顺序值作为单独的组处理

时间:2019-04-18 03:46:51

标签: r dataframe split

嗨,我正尝试根据某列将R中的data.frame拆分为一个data.frames列表,但如果该列中的值发生更改然后返回,则将它们视为单独的组并拆分彼此。

例如,这是一个非常简单的可复制示例。

Testdf <- data.frame(x= 1:20,test = rep(c(TRUE,FALSE,TRUE,FALSE),each = 5))

我可以正常拆分:

Testdf %>% split(.$test)

但是然后TRUE s 1:5与11:15起的TRUE s分组,我想要

Testdf %>% split(rep(1:4,each = 5))

但是我的真实数据非常复杂,没有标准的小组人数或类似的东西。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

主键是为split

创建适当的组

一种替代方法是使用data.table::rleidsplit

split(Testdf, data.table::rleid(Testdf$test))


#$`1`
#  x test
#1 1 TRUE
#2 2 TRUE
#3 3 TRUE
#4 4 TRUE
#5 5 TRUE

#$`2`
#    x  test
#6   6 FALSE
#7   7 FALSE
#8   8 FALSE
#9   9 FALSE
#.....

如果您仅拥有TRUE / FALSE值,那么可以使用diff

split(Testdf, cumsum(c(0, diff(Testdf$test)) != 0))

和另一个rle

split(Testdf, with(rle(Testdf$test), rep(seq_along(values), lengths)))