将数据切片到单独的Dataframe中

时间:2018-02-13 08:44:12

标签: r dataframe

我有一个数据框:

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 rbind1-1之间的行dataframe并将其推送到list

步骤:

  1. 2018-01-01等于1,因此它将成为我数据框的第一个元素 2018-01-02等于0所以我需要将其绑定到第一个数据帧 2018-01-03等于-1所以我需要将它绑定到第一个数据帧,这将构成列表的第一个元素

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

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

  4. 预期输出是这样的

    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
    

1 个答案:

答案 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