嗨,我正在尝试根据列将我的data.frame拆分为R(进入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))
但是我的真实数据非常复杂,并且没有标准的组大小或类似的东西。
有什么建议?
主要关键是为split
创建合适的组
另一种方法是使用data.table::rleid
来split
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
值,纯粹的基础R替代方法是使用diff
split(Testdf, cumsum(c(0, diff(Testdf$test)) != 0))
另一个与rle
split(Testdf, with(rle(Testdf$test), rep(seq_along(values), lengths)))