我有一个数据帧:
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和-1中dataframe,并将它推上list.
脚步:
2018-01-01是等于1所以它将是我的数据帧的第一个元素
2018-01-02是等于0所以我需要rbind它到第一个数据帧
2018-01-03是等于-1所以我需要将它rbind到第一个数据帧,这将构成列表的第一个元素
2018-01-04并2018-01-05等于0所以我什么都不做......
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)
假设 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)