我有一个数据框:
public abstract class Entity<TKey>
{
public TKey Id { get; }
protected Entity() { }
protected Entity(IIdentityFactory<TKey> identityFactory)
{
if (identityFactory == null)
throw new ArgumentNullException(nameof(identityFactory));
Id = identityFactory.CreateIdentity();
}
}
我希望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
rbind
中1
和-1
之间的行dataframe
并将其推送到list
。
步骤:
2018-01-01
等于1
,因此它将成为我数据框的第一个元素
2018-01-02
等于0
所以我需要将其绑定到第一个数据帧
2018-01-03
等于-1
所以我需要将它绑定到第一个数据帧,这将构成列表的第一个元素
2018-01-04
和2018-01-05
等于0
,所以我什么都不做......
2018-01-06
等于1
所以我创建一个数据帧将是它的第一个元素。 2018-01-07
等于-1
所以我将转向数据框,这将构成列表的第二个元素
预期输出是这样的
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
答案 0 :(得分:4)
假设1和-1的数量相同,获取带有==
和which
的行的索引,然后使用Map
遍历索引并将第1列的子集'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