嗨,我正尝试根据某列将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))
但是我的真实数据非常复杂,没有标准的小组人数或类似的东西。
有什么建议吗?
答案 0 :(得分:0)
主键是为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
值,那么可以使用diff
split(Testdf, cumsum(c(0, diff(Testdf$test)) != 0))
和另一个rle
split(Testdf, with(rle(Testdf$test), rep(seq_along(values), lengths)))