【问题标题】:Group by, Summarize, MAX, and count in R在 R 中分组、汇总、MAX 和计数
【发布时间】:2017-11-01 21:36:04
【问题描述】:

以下是我想要通过更新记录的最新更改并采用 SUB_NO 和 LOAN 列的 groupby 来合并的数据。

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 == "INSTALLMENT",您将不会在输出中获得SUB_NO = 124(其中FEATURE_CODE = OTHER)的行。
  • @neilfws 我不担心安装以外的记录。如果它们保持原样并在计数列中填充 NA 就可以了。
  • 也不清楚为什么第二个计数应该是0。不应该是1吗?
  • 去掉filter这一行,因为你想保留你的OTHER特征码。如果您希望摘要仅计算 INSTALLMENT 功能代码,而不是 COUNT = n(),请使用 COUNT = sum(FEATURE_CODE == INSTALLMENT)
  • 您可以随时在sum() 中添加na.rm = T

标签: r dplyr


【解决方案1】:

正如@gregor 所指出的,举个例子会更有用。这是我理解你想要的:

  1. FEATURE_CODE = INSTALLMENT的子集数据

  2. SUB_NOLOAN对所有记录进行分组

  3. 合并第 2 步中的记录,以便最终数据集包含单个条目的最新 ON_DATEND_DATE 和初始 ST_DATE(在第 2 步中分组)。

我建议使用data.table 方法,根据我的经验,这种方法更干净、更快捷。

我使用as.Date 将日期转换为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。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多