按行拆分data.frame,将非连续值作为单独的组处理

问题描述 投票:2回答:1

嗨,我正在尝试根据列将我的data.frame拆分为R(进入data.frames列表)但是如果值在该列中发生更改然后返回,则将它们视为单独的组并相互拆分。

例如,这是一个非常简单的可重复的例子。

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

我可以正常分裂:

Testdf %>% split(.$test)

然后TRUEs 1:5与来自11:15的TRUEs分组,我想要相当于

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

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

有什么建议?

r dataframe split
1个回答
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值,纯粹的基础R替代方法是使用diff

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

另一个与rle

split(Testdf, with(rle(Testdf$test), rep(seq_along(values), lengths)))
© www.soinside.com 2019 - 2024. All rights reserved.