根据某些条件对旧框架进行分组后,如何创建数据框架列表?

时间:2018-10-24 15:10:09

标签: r dataframe subset

我有以下数据框:

    T   a  b  c
1   1   0  0  0
2   2   1  0  0
3   5   1  0  0
4   6   1  0  0
5   7   0  1  0
6   9   0  1  0
7   10  0  0  1
8   12  0  0  0
9   14  0  0  0
10  15  1  0  0
11  16  1  0  0
12  17  0  1  0
13  18  0  0  1

我想对该数据帧进行子集化,并创建一个数据帧列表。每个数据帧都必须填充(旧的)行,以确保一列中依次有“ 1”,然后是b列,最后是c列。 (对于该数据帧)预期结果将是2个数据帧的列表:

data frame 1:
             T   a  b  c                          
         1   2   1  0  0                         
         2   5   1  0  0
         3   6   1  0  0
         4   7   0  1  0
         5   9   0  1  0
         6   10  0  0  1 
and data frame 2:
             T   a  b  c
         1   15  1  0  0
         2   16  1  0  0
         3   17  0  1  0
         4   18  0  0  1

有什么想法吗? 预先谢谢你!

1 个答案:

答案 0 :(得分:0)

基于预期的输出

i1 <- do.call(pmax, df1[-1])
grp <- inverse.rle(within.list(rle(i1 ==1), {values <- seq_along(values)}))
split(df1[i1==1,], grp[i1==1])
#$`2`
#   T a b c
#2  2 1 0 0
#3  5 1 0 0
#4  6 1 0 0
#5  7 0 1 0
#6  9 0 1 0
#7 10 0 0 1

#$`4`
#    T a b c
#10 15 1 0 0
#11 16 1 0 0
#12 17 0 1 0
#13 18 0 0 1