以下是我想要合并的数据,方法是更新记录的最新更改并将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具有初始开始日期和最近更新日期。
答案 0 :(得分:1)
正如@gregor指出的那样,一个例子会更有用。这就是我理解你想要的东西:
FEATURE_CODE = INSTALLMENT
按SUB_NO
和LOAN
合并第2步中的记录,使最终数据集包含各个条目的最新ON_DATE
,ND_DATE
和初始ST_DATE
(在步骤2中分组)。
我建议使用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.
您可以将其他变量添加到上面的第二个列表中,以执行您可能需要的任何其他操作。希望这有用!