分组依据,汇总,MAX和R中的计数

时间:2017-11-01 21:36:05

标签: r dplyr

以下是我想要合并的数据,方法是更新记录的最新更改并将SUB_NO和LOAN列分组。

SUB_NO  ON_DATE ST_DATE ND_DATE N_SEQ_NO    E_SEQ_NO    N_CODE  ACTV_AMT    L_SEQ_NO    FEATURE_CODE    LOAN      
123     7/19/17 6/18/17 7/17/17 916       16           O         15.63    153         INSTALLMENT     152       
123     8/21/17 7/18/17 8/17/17 916       16           O         15.63    154         INSTALLMENT     152      
124     6/20/17 5/18/17 6/17/17 916       17           O         15.63    152         OTHER           153    

预期产出:

SUB_NO  ON_DATE ST_DATE ND_DATE N_SEQ_NO    E_SEQ_NO    N_CODE  ACTV_AMT    L_SEQ_NO    FEATURE_CODE    LOAN    COUNT  
123     8/21/17 6/18/17 8/17/17 916       16           O         15.63    154         INSTALLMENT     152       2
124     6/20/17 5/18/17 6/17/17 916       17           O         15.63    152         OTHER           153       0


library(dplyr)
df1 <- df %>% 
  filter(FEATURE_CODE == "INSTALLMENT")  %>%
  group_by(SUB_NO,LOAN) %>%
  slice(which.max(as.Date(ON_DATE, '%m/%d/%Y'))) %>%
  slice(which.max(as.Date(ND_DATE, '%m/%d/%Y'))) %>%
  slice(which.max(L_SEQ_NO)) %>%
  summarize(COUNT = n())

我的输出为:

LOAN COUNT
152  2

有人可以帮助我获得所需的输出吗?

我的主要目标是每个SUB_NO包含多个涉及INSTALLMENT的FEATURE_CODE不同的事务。我想识别INSTALLMENT事务的数量,并将数据合并到1条记录中,其中INSTALLMENT feature_code具有初始开始日期和最近更新日期。

1 个答案:

答案 0 :(得分:1)

正如@gregor指出的那样,一个例子会更有用。这就是我理解你想要的东西:

  1. FEATURE_CODE = INSTALLMENT

  2. 的子集数据
  3. SUB_NOLOAN

  4. 对所有记录进行分组
  5. 合并第2步中的记录,使最终数据集包含各个条目的最新ON_DATEND_DATE和初始ST_DATE(在步骤2中分组)。

  6. 我建议使用data.table方法,根据我的经验,这种方法更清洁,更快捷。

    我使用date将日期转换为班级as.Date的对象:

    dat$ST_DATE <- as.Date(dat$ST_Date)
    

    然后使用以下代码:

    dat[FEATURE_CODE == "INSTALLMENT", .(ON_DATE = max(ON_DATE), 
                                         ST_DATE = min(ST_DATE), 
                                         ND_DATE = max(ND_DATE)), 
        by = .(SUB_NO, LOAN)]
    

    ,输出为:

       SUB_NO LOAN    ON_DATE    ST_DATE    ND_DATE
    1:    123  152 2017-08-21 2017-06-18 2017-08-17
    

    符合要求1,2和3.

    您可以将其他变量添加到上面的第二个列表中,以执行您可能需要的任何其他操作。希望这有用!