如何使用列中的值条件拆分数据框?

我有一个数据框,名为beat的列之一包含二进制值。在这里,我想分割数据框,以便每次beat==1形成一个新的数据框。

当前数据框示例:

frame    value    beat
1        4        0
2        5        0
3        3        0
4        6        1
5        7        0
6        4        0
7        2        1
8        3        0
9        3        0
10       1        0
11       4        0
12       8        0
13       7        1
14       9        0
15       2        0

所需的数据帧:

frame    value    beat
4        6        1
5        7        0
6        4        0

frame    value    beat
7        2        1
8        3        0
9        3        0
10       1        0
11       4        0
12       8        0

frame    value    beat
13       7        1
14       9        0
15       2        0

我尝试根据nrow使用split,但是由于行数各不相同,因此我必须手动进行。我对R还是很陌生,所以我希望有人能指出我正确的方向。

gouihk7 回答:如何使用列中的值条件拆分数据框?

split时将cumsumbeat = 1一起使用来创建组

split(df,cumsum(df$beat == 1))

在查看所需的输出时,您似乎想忽略行,直到第一个1为止,在这种情况下,首先是数据帧的子集,然后是split

temp <- df[which.max(df$beat) : nrow(df),]
split(temp,cumsum(temp$beat == 1))

#$`1`
#  frame value beat
#4     4     6    1
#5     5     7    0
#6     6     4    0

#$`2`
#   frame value beat
#7      7     2    1
#8      8     3    0
#9      9     3    0
#10    10     1    0
#11    11     4    0
#12    12     8    0

#$`3`
#   frame value beat
#13    13     7    1
#14    14     9    0
#15    15     2    0
,

使用base R时,可以将split()findInterval()一起使用:

lst <- split(df,findInterval(seq(nrow(df)),which(df$beat==1)))

lst[names(lst)!="0"]产生所需的输出:

> lst[names(lst)!="0"]
$`1`
  frame value beat
4     4     6    1
5     5     7    0
6     6     4    0

$`2`
   frame value beat
7      7     2    1
8      8     3    0
9      9     3    0
10    10     1    0
11    11     4    0
12    12     8    0

$`3`
   frame value beat
13    13     7    1
14    14     9    0
15    15     2    0
本文链接:https://www.f2er.com/3067362.html

大家都在问