将数据切片到单独的Dataframe中

pat*_*ick 6 r dataframe

我有一个数据帧:

entry_df <- data.frame(date = seq(as.Date("2018/01/01"), as.Date("2018/01/07"), 
                       "days"),diff = c(1,0,-1 , 0,0 ,1,-1))

entry_df

        date diff
1 2018-01-01    1
2 2018-01-02    0
3 2018-01-03   -1
4 2018-01-04    0
5 2018-01-05    0
6 2018-01-06    1
7 2018-01-07   -1
Run Code Online (Sandbox Code Playgroud)

我想rbind这是悫行1-1dataframe,并将它推上list.

脚步:

  1. 2018-01-01是等于1所以它将是我的数据帧的第一个元素 2018-01-02是等于0所以我需要rbind它到第一个数据帧 2018-01-03是等于-1所以我需要将它rbind到第一个数据帧,这将构成列表的第一个元素

  2. 2018-01-042018-01-05等于0所以我什么都不做......

  3. 2018-01-06等于,1所以我创建一个数据帧将是它的第一个元素.2018-01-07等于,-1我将rbind到数据帧,这将构成列表的第二个元素

预期的输出是这样的

output_list[[1]] <- data.frame(date = seq(as.Date("2018/01/01"), 
                               as.Date("2018/01/03"), "days")) 
output_list[[2]] <- data.frame(date = seq(as.Date("2018/01/06"),
                               as.Date("2018/01/07"), "days")) 

output_list      

[[1]]
        date
1 2018-01-01
2 2018-01-02
3 2018-01-03

[[2]]
        date
1 2018-01-06
2 2018-01-07
Run Code Online (Sandbox Code Playgroud)

akr*_*run 4

假设 1 和 -1 的数量相同,使用==和获取行的which索引,然后使用 'entry_df' 的第一列循环遍历索引Map并取子集 'entry_df'

Map(function(i, j) entry_df[i:j, 1, drop = FALSE], 
           which(entry_df$diff == 1), which(entry_df$diff == -1))
#[[1]]
#        date
#1 2018-01-01
#2 2018-01-02
#3 2018-01-03

#[[2]]
#        date
#6 2018-01-06
#7 2018-01-07
Run Code Online (Sandbox Code Playgroud)